常见selenium 代码及含义:
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。 Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。
可以从 PyPI 网站下载 Selenium库https://pypi.python.org/simple/selenium , 也可以用第三方管理器 pip用命令安装:pip install selenium
Selenium 官方参考文档:http://selenium-python.readthedocs.io/index.html
Selenium也分为有界面浏览器和无界面浏览器
快速入门
火狐驱动下载路径(GeckoDriver):https://gethub.com/mozilla/geckodriver/releases
chromedriver下载地址: http://chromedriver.storage.googleapis.com/index.html (2.3.8是最新的,下载的驱动版本一定要支持你当前的浏览器版本)
Selenium 库里有个叫 WebDriver 的 API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互 (发送文本、点击等),以及执行其他动作来运行网络爬虫。
注意: 我们使用的有界面浏览器,它虽然方便我们观察,但是在实际运用中是非常消耗性能的 我们也可以使用Chrome的无界面浏览器,除了没有浏览器界面以外,其它的相关操作都与有界面浏览器相同
# 使用selenium来加载动态网页
# 首先要安装selenium:pip3 install selinium
# selinium自身不带浏览器驱动,我们要自己下载驱动
from selenium import webdriver
import time
#设置无头浏览器
# options = webdriver.ChromeOptions()
# options.set_headless()
#创建一个浏览器的驱动
# driver = webdriver.Chrome(
# executable_path='/home/ljh/桌面/tool/chromedriver',
# options=options
# )
driver = webdriver.Chrome(
executable_path='/home/ljh/桌面/tool/chromedriver',
)
driver.get('http://www.baidu.com')
#保存屏幕的截图
# driver.save_screenshot('baidu.png')
#找到百度的输入框
# driver.find_element_by_id('kw').send_keys('美男子')
# #找到按钮,模拟点击
# driver.find_element_by_id('su').click()
# time.sleep(2)
#隐式等待
driver.implicitly_wait(5)
#添加显式等待
#设置循环等待
from selenium.webdriver.support.ui import WebDriverWait
#条件(根据条件寻找对应的节点)
from selenium.webdriver.support import expected_conditions as EC
driver_wait = WebDriverWait(driver,20)
driver_wait.until(
# EC.element_to_be_selected(driver.find_element_by_id(''))
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
# #通过连接的文本找对应的标签
# driver.find_element_by_link_text('下一页>').click()
# driver.find_element_by_class_name('n').click()
# time.sleep(5)
# #返回前页面
# driver.back()
# time.sleep(5)
# #前一页
# driver.forward()
# #关闭当前界面
# driver.close()
#通过page_source直接能够拿到经过浏览器渲染之后的页面数据
#print(driver.page_source)
# print(driver.get_cookies)
# 获取cookies值
# cookies = driver.get_cookies()
# for cookie in cookies:
# print(cookie['name']+':'+cookie['value'])
# 拖拽和点击操作
from selenium.webdriver import ActionChains
element = driver.find_element_by_xpath('//div[@id="u1"]/a[1]')
#将鼠标移动到指定的节点
# ActionChains(driver).move_to_element(element).perform()
#将鼠标移动到指定的节点并且点击该节点(单击)
ActionChains(driver).move_to_element(element).click(element).perform()
#将鼠标移动到指定的节点并且点击该节点(双击击)
ActionChains(driver).move_to_element(element).double_click(element).perform()
##### 在 ac 位置右击
ActionChains(driver).move_to_element(action).context_click(action).perform()
##### 在 ac 位置左键单击hold住
ActionChains(driver).move_to_element(action).click_and_hold(action).perform()
##### 将 ac1 拖拽到 ac2 位置
ac1 = driver.find_element_by_id("su")
ac2 = driver.find_element_by_class_name('mnav')
ActionChains(driver).drag_and_drop(ac1,ac2).perform()
time.sleep(20)
# #退出浏览器
driver.quit()
#selenium的异常处理
from selenium.common.exceptions import TimeoutException,NoSuchElementException
#请求超时,异常处理
try:
driver.get('https://github.com/')
except TimeoutError as err:
print(err)
#找不到节点的异常处理
try:
driver.find_element_by_id('sbcks')
except NoSuchElementException as err:
print(err)
selenium的浏览器驱动也可以执行js语句
#####执行JS语句
js = "document.body.scrollTop=10000"
driver.execute_script(js)
# 使用selenium来加载动态网页
# 首先要安装selenium:pip3 install selinium
# selinium自身不带浏览器驱动,我们要自己下载驱动
from selenium import webdriver
import time
#设置无头浏览器
# options = webdriver.ChromeOptions()
# options.set_headless()
#创建一个浏览器的驱动
# driver = webdriver.Chrome(
# executable_path='/home/ljh/桌面/tool/chromedriver',
# options=options
# )
driver = webdriver.Chrome(
executable_path='/home/ljh/桌面/tool/chromedriver',
)
driver.get('http://www.baidu.com')
#保存屏幕的截图
# driver.save_screenshot('baidu.png')
#找到百度的输入框
# driver.find_element_by_id('kw').send_keys('美男子')
# #找到按钮,模拟点击
# driver.find_element_by_id('su').click()
# time.sleep(2)
#隐式等待
driver.implicitly_wait(5)
#添加显式等待
#设置循环等待
from selenium.webdriver.support.ui import WebDriverWait
#条件(根据条件寻找对应的节点)
from selenium.webdriver.support import expected_conditions as EC
driver_wait = WebDriverWait(driver,20)
driver_wait.until(
# EC.element_to_be_selected(driver.find_element_by_id(''))
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
# #通过连接的文本找对应的标签
# driver.find_element_by_link_text('下一页>').click()
# driver.find_element_by_class_name('n').click()
# time.sleep(5)
# #返回前页面
# driver.back()
# time.sleep(5)
# #前一页
# driver.forward()
# #关闭当前界面
# driver.close()
#通过page_source直接能够拿到经过浏览器渲染之后的页面数据
#print(driver.page_source)
# print(driver.get_cookies)
# 获取cookies值
# cookies = driver.get_cookies()
# for cookie in cookies:
# print(cookie['name']+':'+cookie['value'])
# 拖拽和点击操作
from selenium.webdriver import ActionChains
element = driver.find_element_by_xpath('//div[@id="u1"]/a[1]')
#将鼠标移动到指定的节点
# ActionChains(driver).move_to_element(element).perform()
#将鼠标移动到指定的节点并且点击该节点(单击)
ActionChains(driver).move_to_element(element).click(element).perform()
#将鼠标移动到指定的节点并且点击该节点(双击击)
ActionChains(driver).move_to_element(element).double_click(element).perform()
##### 在 ac 位置右击
ActionChains(driver).move_to_element(action).context_click(action).perform()
##### 在 ac 位置左键单击hold住
ActionChains(driver).move_to_element(action).click_and_hold(action).perform()
##### 将 ac1 拖拽到 ac2 位置
ac1 = driver.find_element_by_id("su")
ac2 = driver.find_element_by_class_name('mnav')
ActionChains(driver).drag_and_drop(ac1,ac2).perform()
time.sleep(20)
# #退出浏览器
driver.quit()
#selenium的异常处理
from selenium.common.exceptions import TimeoutException,NoSuchElementException
#请求超时,异常处理
try:
driver.get('https://github.com/')
except TimeoutError as err:
print(err)
#找不到节点的异常处理
try:
driver.find_element_by_id('sbcks')
except NoSuchElementException as err:
print(err)
selenium的浏览器驱动也可以执行js语句
#####执行JS语句
js = "document.body.scrollTop=10000"
driver.execute_script(js)
刷csdn浏览量:
#首席那安装selinium
from selenium import webdriver
import time
from lxml import etree
import json
#添加显示等待
from selenium.webdriver.support.ui import WebDriverWait
#根据条件寻找对应节点
from selenium.webdriver.support import expected_conditions as EC
#设置无头浏览器
# options=webdriver.ChromeOptions()
# options.set_headless()
#创建浏览器驱动
while True:
driver = webdriver.Chrome(
executable_path='/home/lbc/Documents/chromedriver',
)
# options=options
driver.get('http://www.baidu.com')
#获取cookie
cookies = driver.get_cookies()
cookie_dict = {}
for cookie in cookies:
cookie_dict[cookie['name']] = cookie['value']
# print(cookie_dict)
#显示等待
# driver_wait= WebDriverWait(driver,20)
# driver_wait.until(
# )
# driver.save_screenshot('baidu.png')
driver.find_element_by_id('kw').send_keys('小钢蛋')
#隐式等待
# driver.implicitly_wait(3)
driver.find_element_by_id('su').click()
# driver.find_element_by_xpath('//h3[@class="t"]/a').click()('//div[@id="u1"]/a[1]')
time.sleep(3)
# driver.find_element_by_link_text('下一页>').click()
# time.sleep(3)
#导入鼠标移入
from selenium.webdriver import ActionChains
#用xpath解析并拖拽鼠标进行点击
element = driver.find_element_by_xpath('//h3[@class="t"]/a[1]')
#将鼠标移动到指定的节点
ActionChains(driver).move_to_element(element).perform()
#将鼠标移动到指定的节点并且点击该节点(单击)
ActionChains(driver).move_to_element(element).click(element).perform()
#返回前页面
# driver.back()
time.sleep(10)
driver.quit()
# driver.forward()
#首席那安装selinium
from selenium import webdriver
import time
from lxml import etree
import json
#添加显示等待
from selenium.webdriver.support.ui import WebDriverWait
#根据条件寻找对应节点
from selenium.webdriver.support import expected_conditions as EC
#设置无头浏览器
# options=webdriver.ChromeOptions()
# options.set_headless()
#创建浏览器驱动
while True:
driver = webdriver.Chrome(
executable_path='/home/lbc/Documents/chromedriver',
)
# options=options
driver.get('http://www.baidu.com')
#获取cookie
cookies = driver.get_cookies()
cookie_dict = {}
for cookie in cookies:
cookie_dict[cookie['name']] = cookie['value']
# print(cookie_dict)
#显示等待
# driver_wait= WebDriverWait(driver,20)
# driver_wait.until(
# )
# driver.save_screenshot('baidu.png')
driver.find_element_by_id('kw').send_keys('小钢蛋')
#隐式等待
# driver.implicitly_wait(3)
driver.find_element_by_id('su').click()
# driver.find_element_by_xpath('//h3[@class="t"]/a').click()('//div[@id="u1"]/a[1]')
time.sleep(3)
# driver.find_element_by_link_text('下一页>').click()
# time.sleep(3)
#导入鼠标移入
from selenium.webdriver import ActionChains
#用xpath解析并拖拽鼠标进行点击
element = driver.find_element_by_xpath('//h3[@class="t"]/a[1]')
#将鼠标移动到指定的节点
ActionChains(driver).move_to_element(element).perform()
#将鼠标移动到指定的节点并且点击该节点(单击)
ActionChains(driver).move_to_element(element).click(element).perform()
#返回前页面
# driver.back()
time.sleep(10)
driver.quit()
# driver.forward()
github登录
#首席那安装selinium
from selenium import webdriver
import time
from lxml import etree
import json
#添加显示等待
from selenium.webdriver.support.ui import WebDriverWait
#根据条件寻找对应节点
from selenium.webdriver.support import expected_conditions as EC
#设置无头浏览器
# options=webdriver.ChromeOptions()
# options.set_headless()
#创建浏览器驱动
driver = webdriver.Chrome(
executable_path='/home/lbc/Documents/chromedriver',
)
# options=options
driver.get('https://github.com/login')
#获取cookie
cookies = driver.get_cookies()
cookie_dict = {}
for cookie in cookies:
cookie_dict[cookie['name']] = cookie['value']
# print(cookie_dict)
#显示等待
# driver_wait= WebDriverWait(driver,20)
# driver_wait.until(
# )
# driver.save_screenshot('baidu.png')
driver.find_element_by_id('login_field').send_keys('10000000@qq.com')
#隐式等待
driver.find_element_by_id('password').send_keys('*********')
# driver.implicitly_wait(3)
driver.find_element_by_css_selector('.btn.btn-primary.btn-block').click()
html = driver.page_source
with open("liubo.html","w+") as f:
f.write(html)
# driver.find_element_by_xpath('//h3[@class="t"]/a').click()('//div[@id="u1"]/a[1]')
# time.sleep(3)
# driver.find_element_by_link_text('下一页>').click()
# time.sleep(3)
#导入鼠标移入
# from selenium.webdriver import ActionChains
# #用xpath解析并拖拽鼠标进行点击
# element = driver.find_element_by_xpath('//h3[@class="t"]/a[1]')
# #将鼠标移动到指定的节点
# ActionChains(driver).move_to_element(element).perform()
# #将鼠标移动到指定的节点并且点击该节点(单击)
# ActionChains(driver).move_to_element(element).click(element).perform()
#返回前页面
# driver.back()
time.sleep(10)
driver.quit()
# driver.forward()
#首席那安装selinium
from selenium import webdriver
import time
from lxml import etree
import json
#添加显示等待
from selenium.webdriver.support.ui import WebDriverWait
#根据条件寻找对应节点
from selenium.webdriver.support import expected_conditions as EC
#设置无头浏览器
# options=webdriver.ChromeOptions()
# options.set_headless()
#创建浏览器驱动
driver = webdriver.Chrome(
executable_path='/home/lbc/Documents/chromedriver',
)
# options=options
driver.get('https://github.com/login')
#获取cookie
cookies = driver.get_cookies()
cookie_dict = {}
for cookie in cookies:
cookie_dict[cookie['name']] = cookie['value']
# print(cookie_dict)
#显示等待
# driver_wait= WebDriverWait(driver,20)
# driver_wait.until(
# )
# driver.save_screenshot('baidu.png')
driver.find_element_by_id('login_field').send_keys('10000000@qq.com')
#隐式等待
driver.find_element_by_id('password').send_keys('*********')
# driver.implicitly_wait(3)
driver.find_element_by_css_selector('.btn.btn-primary.btn-block').click()
html = driver.page_source
with open("liubo.html","w+") as f:
f.write(html)
# driver.find_element_by_xpath('//h3[@class="t"]/a').click()('//div[@id="u1"]/a[1]')
# time.sleep(3)
# driver.find_element_by_link_text('下一页>').click()
# time.sleep(3)
#导入鼠标移入
# from selenium.webdriver import ActionChains
# #用xpath解析并拖拽鼠标进行点击
# element = driver.find_element_by_xpath('//h3[@class="t"]/a[1]')
# #将鼠标移动到指定的节点
# ActionChains(driver).move_to_element(element).perform()
# #将鼠标移动到指定的节点并且点击该节点(单击)
# ActionChains(driver).move_to_element(element).click(element).perform()
#返回前页面
# driver.back()
time.sleep(10)
driver.quit()
# driver.forward()