关于使用python+selenium的一些注意事项

        日前小白工作中遇到需要使用python进行数据爬取并导入数据库的操作,但是多网站都存在反爬虫/自动化检测的机制,导致需要进入网页进行点击验证操作,因此将自己最近两天踩过的坑整理一下,方便各位同学参考借鉴处理方法。

配置介绍:

python 3.12.3 64-bit

VsCode 最新版(自动更新)

**强烈建议各种库安装旧版本,不要直接安装,会出现各种不兼容情况**

1.首先使用webdriver的问题

        基于开发需求,本意是准备使用Chrome浏览器,对于各种代码兼容性更高,但是,找了一大圈办法之后,发现对应的webdriver版本过低,与Chrome无法兼容,降版本操作复杂,网上比较多,但是经过实测发现大部分都无法完成。因此改用Edge适配,微软的webdriver与edge是一一对应更新的,使用方法与Chrome非常类似。

        首先在python中下载selenium,直接使用命令语句pip install selenium即可。

        其次下载浏览器驱动Microsoft Edge WebDriver | Microsoft Edge Developer

ps:注意,浏览器驱动可以查看一下是否与自己浏览器版本号相符,必须要保持一致!将下载好的msedeg.exe改名为MicrosoftWebDriver.exe,与selenium内置的配置名保持一致。

from time import sleep
from selenium import webdriver
 
driver = webdriver.Edge()
 
driver.get(r'https://www.baidu.com/')
 
sleep(5)
driver.close()

2.关于中间间隔时间!!!一定要在每一步后面都设置time.sleep()

        因为目前的浏览器驱动是自动在运行完代码之后关闭网页,在这一步跌了非常大的跟头,导致后面的操作都受到影响,直接报错,例如网页未加载完毕就进行操作,会导致无法捕获元素等。

三种方法:

# 第一种:使用time库,需要提前下载
from time import sleep

sleep(3)

# 第二种:浏览器隐性等待
# 安装msedge-selenium-tools库
from msedge.selenium_tools import EdgeOptions
from msedge.selenium_tools import Edge

# 初始化实例对象
edge_options = EdgeOptions()
browser = Edge(executable_path='webdriver存储路径',options=edge_options)
# 隐性等待,基本等于等待网页加载完毕的时间
browser.implicitly_wait(10)
#ps:隐性等待可以提前设置,不需要先行开启浏览器

# 第三种:浏览器显性等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Edge()
# 访问页面
driver.get('www.baidu.com')

# 显性等待,最长10秒,每隔0.1秒查询一次(默认0秒)
wait = WebDriverWait(driver, 10 , 0.1)

#ps:等待元素出现,可以配合try-except进行判断是否存在元素
# 等待【单击按钮】加载出来
button = wait.until(EC.presence_of_element_located((By.ID, 'd')))
# 加载出来时立即执行下一步
button.click()

3.如果代码无法直接运行,并且报错“Message: ‘MicrosoftWebDriver.exe‘ executable needs to be in PATH”,有以下三种可能:

第一种:没有将驱动改名

第二种:没有将浏览器驱动放在python.exe同目录下

第三种:没有配置环境变量。

4.使用过程中显示报错“ValueError: Timeout value connect was ……, but it must be an int, float or None”

这种情况一般是库的版本适配问题,大概率是驱动的selenium库和urllib3库版本不兼容所致,因此只需要重新安装两个库并设置好版本即可,我下载的是这两个版本,足可以适配。或者去官网、pycharm中的包库中查看对应的适配版本号再另行安装。

pip install urllib3==2.1.0
pip install selenium==4.8.0

5.编码错误,报错信息“SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncat”

这类错误在日常使用中很少会出现,基本是属于字符用法重叠导致的报错,类似于快捷键冲突。因此找到对应的错误代码行,将错误符号更换即可。我这里是路径问题导致的,因为windows默认路径是通过反斜杠“\”来分隔,但是代码中需要将其更改为“\\”或者“/”来替换。

6.最重要的一点,如何避免网站识别到你是自动程序/爬虫!

这一点网上有很多教程,但是可以使用的很少,主要原因是目前经过版本更新后,浏览器的window.navigator.webdriver已经不支持自由改变了,因此需要使用别的手法进行。我这里提供一个简单的代码以作参考。

from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time
# 实现规避检测
#安装msedge-selenium-tools库
from msedge.selenium_tools import EdgeOptions
from msedge.selenium_tools import Edge
    
edge_options = EdgeOptions()
edge_options.use_chromium = True
edge_options.add_argument('--disable-blink-features=AutomationControlled')

# 如何实现让selenium规避被检测到的风险
browser = Edge(executable_path='驱动路径',options=edge_options)

#URL地址
browser.get("https://www.baidu.com")
# 设置隐式等待时间为10秒
browser.implicitly_wait(10)
#窗口最大化
browser.maximize_window()
time.sleep(3)

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值