本文发布于596天前,本文最后更新于595 天前,其中的信息可能已经过时,如有错误请留言或评论。
1. undetected_chromedriver
- 使用方法
import undetected_chromedriver as uc driver = uc.Chrome()
undetected_chromedriver 可以防止浏览器特征被识别,并且可以根据浏览器版本自动下载驱动。
其他使用与正常selenium一致 - 下载安装方式,及详解见下
undetected_chromedriver
2. selenium获取验证码截图
import requests
from PIL import Image
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
# 以下为selenium对浏览器的操作
option = webdriver.ChromeOptions()
#以下为对浏览器的配置
option.add_argument('--disable-infobars') # 禁用浏览器正在被自动化程序控制的提示
# option.add_argument( '--headless' ) # 开启无界面模式
# option.add_argument( '--disable-gpu' ) # 禁用gpu
# option.add_argument('--user-agent=Mozilla/5.0 HAHA') # 配置对象添加替换User-Agent的命令
# option.add_argument('--window-size=1366,768') # 设置浏览器分辨率(窗口大小)
# option.add_argument('--start-maximized') # 最大化运行(全屏窗口),不设置,取元素有可能会报错
# option.add_argument('--disable-infobars') # 禁用浏览器正在被自动化程序控制的提示
# option.add_argument('--incognito') # 隐身模式(无痕模式)
# option.add_argument('--disable-javascript') # 禁用javascript
web = Chorme(options=option)
url = "" # 填写要访问的url
web.get(url)
img = "" # 保存图片的路径,要保存为png或者jpg
web.save_screenshot(img) # 此操作将截屏截取整个浏览器界面并保存到img地址
# 截图出验证码部分的图片
element = web.find_element(by=By.XPTH,value="") # 填写定位到的验证码图片的xpth
# 也可用By.ID或By.NAME等定位
# element的location方法本质上是使用了getElementRect(),区别是其只返回了x,y坐标而没有width和height的值。
print ( "验证码的坐标为:" , element.location) #控制台查看{'x': x, 'y': y}
print ( "验证码的大小为:" , element.size) # 图片大小{'height': h, 'width': w}
# x与y为以左上角为原点定位的一个点,然后以这个元素位置占有一个宽w高h的地方
# 获取到验证码的四点坐标
left_top = element.location[ 'x' ] # x点的坐标
left_bottom = element.location[ 'y' ] # y点的坐标
right_top = element.size[ 'width' ] + left
right_bottom = element.size[ 'height' ] + top
# 从截屏中截出验证码
image = Image.open(img)
# 四点坐标有时可能不是很准确,所以有时需要进行微调,如加减几十或一两百,也可乘一个1.5之类的
crop_image = image.crop((left_top, left_bottom, right_top, right_bottom))
crop_image.save(img) # 将截出的验证码保存回原图位置,也可填写其他位置保存为新文件
3. selenium操作下拉滚动条方法
- 使用js脚本拖动到指定地方(我觉得最好用的)
target = driver.find_element(by=By.ID,value="id_keypair") # 根据find_element得到目标元素 driver.execute_script("arguments[0].scrollIntoView();", target) # 拖动到可以看到terget元素的地方
其他方法可看文末参考,这里我只写了我觉得最好用并且最有用的一种
参考:
- selenium获取验证码参考:
- selenium操作下拉滚动条方法参考:https://blog.csdn.net/feiyu68/article/details/120928895