赞
踩
Selenium
是一个 Web
的自动化测试工具,类型像我们玩游戏用的按键精灵,它支持所有主流的浏览器
Selenium
可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截 屏,或者判断网站上某些动作是否发生
Selenium
可以便捷的获取网站中动态加载的数据,也可以便捷地实现模拟登陆
Selenium
模块:基于浏览器自动化的模块
先安装环境pip install selenium
,然后下载对应浏览器的驱动版本
各个浏览器对应的selenium
浏览器 | 驱动 | WebDriver API |
---|---|---|
Chrome | ChromeDriver.exe | selenium-chrome-driver-3.141.59.jar |
IE | IEDriverServer.exe | selenium-ie-driver-3.141.59.jar |
Edge | msedgedriver.exe | selenium-edge-driver-3.141.59.jar |
Firefox | geckodriver.exe | selenium-firefox-driver-3.141.59.jar |
谷歌浏览器:http://chromedriver.storage.googleapis.com/index.html
IE浏览器:http://selenium-release.storage.googleapis.com/index.html
谷歌不同浏览器对应版本,按照chrome版本对应的driver,在谷歌浏览器70版本后,直接按照浏览器版本去找对应的driver(只对应大版本就行),如下是70版本之前的对应版本映射
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.44 | v69-71 |
v2.43 | v69-71 |
v2.42 | v68-70 |
v2.41 | v67-69 |
v2.40 | v66-68 |
v2.39 | v66-68 |
v2.38 | v65-67 |
v2.37 | v64-66 |
v2.36 | v63-65 |
v2.35 | v62-64 |
v2.34 | v61-63 |
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
由于360浏览器也是使用谷歌内核,因此使用360浏览器来进行代码测试
操作前需要先实例化一个浏览器对象,编写基于浏览器自动化的操作代码:
浏览器对象.get(url)
浏览器对象.find系列方法
浏览器对象.execute_script(js脚本)
浏览器对象.forward()
浏览器对象.back()
浏览器对象.quit()
浏览器对象.save_screenshot('保存截图名')
标签交互:
元素对象.send_keys('xxx')
元素对象.click()
from selenium.webdriver.chrome.options import Options from selenium import webdriver import time #此处是浏览器地址(可以是360浏览器(谷歌内核)或者谷歌浏览器) __browser_url = r'D:\SoftWare-NeedSoftWare\360\360Browser\360se6\Application\360se.exe' chrome_options = Options() chrome_options.binary_location = __browser_url #获取浏览器实例对象 driver = webdriver.Chrome(chrome_options=chrome_options,executable_path='./chromedriver.exe')#此处地址是chromer驱动地址 driver.get('https://www.baidu.com/')#发起请求 search_input=driver.find_element_by_id('q') search_input.send_keys("asfs") #点击搜索按钮 bth=driver.find_element_by_css_selector('.bth-search')#标签定位 bth.click()#点击按键的动作 time.sleep(3) driver.quit()#关闭浏览器
如果目标页面内有子页面,可以使用iframe
进行操作,即如果当前标签如div
被包含在了iframe标签
中,可以理解为嵌套在页面中了,就不能直接获取该div
标签,需要使用浏览器对象的switch_to.frame()
方法切换到div
标签所在的iframe标签
比如,直接使用浏览器对象.find_element_by_id()
方法会报错找不到该标签,就先使用switch_to.frame
处理下:
__browser_url = r'D:\SoftWare-NeedSoftWare\360\360Browser\360se6\Application\360se.exe'
chrome_options = Options()
chrome_options.binary_location = __browser_url
driver = webdriver.Chrome(chrome_options=chrome_options,executable_path='./chromedriver.exe')#此处地址是chromer驱动地址
driver.switch_to.frame('xxx')
div_obj=driver.find_element_by_id('div')
使用selenium
的时候,会遇到悬停后点击元素的操作,因此需要一个动作链来完成这个功能
动作链拖动是一系列操作,首先需要导包from selenium.webdriver import ActionChains
然后实例化一个动作对象:action=ActionChains(浏览器对象)
长按且点击操作:click_and_hold(元素对象)
偏移位置量:move_by_offset(x,y)
动作链立即执行:perform()
释放动作链对象:release()
iframe和selenium示例如下:
from time import sleep from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.chrome.options import Options chrome_options = Options() __browser_url = r'E:\SoftWare-Tools\Google-Browser\Google\Chrome\Application\chrome.exe ' ##浏览器的地址 chrome_options.binary_location = __browser_url driver = webdriver.Chrome(chrome_options=chrome_options,executable_path='./chromedriver.exe') driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') driver.switch_to.frame('iframeResult')#切换到浏览器标签定位的作用域 div = driver.find_element_by_id('draggable') #动作链 action=ActionChains(driver) action.click_and_hold(div) for i in range(5): action.move_by_offset(17,0).perform()#perform是立即执行的方法 sleep(0.3) action.release() driver.quit()
所谓无头浏览器,就是使用selenium
没有浏览器页面,更加方便脚本运行;规避检测的作用是有些浏览器会阻碍selenium
脚本对网站的访问而进行限制
导包
实现不可视化界面
from selenium.webdriver.chrome.options import Options
实现规避检测
from selenium.webdriver import ChromeOptions
示例如下:
from selenium import webdriver from time import sleep #实现不可视化界面 from selenium.webdriver.chrome.options import Options #实现规避检测 from selenium.webdriver import ChromeOptions #不可视化界面 chrome_options = Options() __browser_url = r'E:\SoftWare-Tools\Google-Browser\Google\Chrome\Application\chrome.exe ' ##浏览器的地址 chrome_options.binary_location = __browser_url chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') #规避检测 option=ChromeOptions() option.add_experimental_option('excludeSwitches',['enable-automation']) driver = webdriver.Chrome(chrome_options=chrome_options,options=option,executable_path='./chromedriver.exe') driver.get('https://www.baidu.com') print(driver.page_source) sleep(2) driver.quit()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。