当前位置:   article > 正文

Python爬虫之selenium_seninum python

seninum python

1 selenium

1.1 selenium简介

Selenium是一个 Web 的自动化测试工具,类型像我们玩游戏用的按键精灵,它支持所有主流的浏览器
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截 屏,或者判断网站上某些动作是否发生
Selenium可以便捷的获取网站中动态加载的数据,也可以便捷地实现模拟登陆
Selenium模块:基于浏览器自动化的模块

1.2 selenium环境

先安装环境pip install selenium,然后下载对应浏览器的驱动版本
各个浏览器对应的selenium

浏览器驱动WebDriver API
ChromeChromeDriver.exeselenium-chrome-driver-3.141.59.jar
IEIEDriverServer.exeselenium-ie-driver-3.141.59.jar
Edgemsedgedriver.exeselenium-edge-driver-3.141.59.jar
Firefoxgeckodriver.exeselenium-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.44v69-71
v2.43v69-71
v2.42v68-70
v2.41v67-69
v2.40v66-68
v2.39v66-68
v2.38v65-67
v2.37v64-66
v2.36v63-65
v2.35v62-64
v2.34v61-63
v2.33v60-62
v2.32v59-61
v2.31v58-60
v2.30v58-60
v2.29v56-58
v2.28v55-57
v2.27v54-56
v2.26v53-55
v2.25v53-55
v2.24v52-54
v2.23v51-53
v2.22v49-52
v2.21v46-50
v2.20v43-48
v2.19v43-47
v2.18v43-46
v2.17v42-43
v2.13v42-45
v2.15v40-43
v2.14v39-42
v2.13v38-41
v2.12v36-40
v2.11v36-40
v2.10v33-36
v2.9v31-34
v2.8v30-33
v2.7v30-33
v2.6v29-32
v2.5v29-32
v2.4v29-32

1.3 selenium基本操作

由于360浏览器也是使用谷歌内核,因此使用360浏览器来进行代码测试
操作前需要先实例化一个浏览器对象,编写基于浏览器自动化的操作代码:

  • 发起请求:浏览器对象.get(url)
  • 标签定位:浏览器对象.find系列方法
  • 执行js程序:浏览器对象.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()#关闭浏览器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

1.4 selenium处理iframe

如果目标页面内有子页面,可以使用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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.5 selenium动作链

使用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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

1.6 无头浏览器和规避检测

所谓无头浏览器,就是使用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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/587361
推荐阅读
相关标签
  

闽ICP备14008679号