python + selenium 爬淘宝登录

淘宝的反爬虫机制如果更强大那么该文章方法也没用了,记录于2023.08.07。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver import ChromeOptions
import datafile

from time import sleep


option = ChromeOptions()
option.add_argument('--start-maximized')#最大化窗口
option.add_experimental_option('excludeSwitches',['enable-automation'])#禁用自动化栏
option.add_experimental_option('useAutomationExtension', False)#禁用自动化栏的原理:将window.navigator.webdriver改为undefined。


#屏蔽密码提示框
prefs = {
    'credentials_enable_service' : False,'profile.password_manager_enabled' : False
}
option.add_experimental_option('prefs',prefs)

#反爬虫特征处理
option.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(options=option)
driver.get('https://login.taobao.com/member/login.jhtml?redirectURL=http%3A%2F%2Fi.taobao.com%2Fmy_taobao.htm%3Fspm%3Da21bo.jianhua.754894437.1.5af92a89zyJDZq%26pm_id%3D1501036000a02c5c3739')


action = ActionChains(driver)

username = driver.find_element(By.XPATH,'//*[@id="fm-login-id"]')
username.clear()
username.send_keys(datafile.username)
password = driver.find_element(By.XPATH,'//*[@id="fm-login-password"]')
password.clear()
password.send_keys(datafile.password)
login_button = driver.find_element(By.XPATH,'//*[@id="login-form"]/div[4]/button')
login_button.click()
sleep(5)

代码解释:

1.add_experimental_option()方法

add_experimental_option 方法向 ChromeOptions 中添加一个实验性选项。具体来说,它添加了一个名为 'excludeSwitches' 的选项,并将其值设置为 ['enable-automation'],用于禁用自动化标记。

Chrome 浏览器在运行时通常会检测自动化程序(例如 Selenium)的存在,并通过 enable-automation 这个标记来判断是否由自动化控制。通过禁用这个标记,你可以尝试规避网站的一些反自动化措施,以更好地模拟真实用户的行为。

需要注意的是,excludeSwitches 是一个实验性选项,可能会在未来的 Chrome 版本中被删除或更改。因此,使用该选项时,你需要关注 Selenium 和 Chrome 浏览器版本的兼容性,确保代码的可靠性和稳定性。

2.add_experimental_option()

add_experimental_option 方法向 ChromeOptions 中添加一个实验性选项。具体来说,它添加了一个名为 'useAutomationExtension' 的选项,并将其值设置为 False,用于禁用自动化扩展。

在过去,Selenium 通过自动化扩展与浏览器进行交互,但某些网站可能会检测这种扩展的存在,从而发现自动化测试或爬虫行为。通过禁用这个自动化扩展,你可以尝试规避网站的一些反自动化措施,增加你的自动化脚本的稳定性和安全性。

与之前提到的 excludeSwitches 类似,useAutomationExtension 也是一个实验性选项,可能会在未来的 Chrome 版本中被删除或更改。因此,同样需要注意 Selenium 和 Chrome 浏览器版本的兼容性。

综合来说,这两行代码的目的是为了优化 Selenium 自动化脚本,避免被网站检测到使用了自动化工具,从而增加自动化测试和网页爬取的成功率。

3.

prefs = {
    'credentials_enable_service' : False,'profile.password_manager_enabled' : False
}
option.add_experimental_option('prefs',prefs)

这部分代码使用了 add_experimental_option 方法来向 ChromeOptions 中添加一个实验性选项。具体来说,它添加了一个名为 'prefs' 的选项,并将其值设置为一个包含两个键值对的字典 prefs

这个字典 prefs 包含两个键值对:

  1. 'credentials_enable_service': False: 这个键值对用于禁用 Chrome 浏览器的凭据服务,也就是浏览器中的保存密码功能。将其设置为 False 可以防止 Chrome 浏览器保存和自动填充密码,以增加安全性。

  2. 'profile.password_manager_enabled': False: 这个键值对用于禁用 Chrome 浏览器的密码管理器功能。将其设置为 False 可以阻止 Chrome 浏览器询问是否保存密码,同样也是为了增强安全性。

通过向 ChromeOptions 中添加这个实验性选项,你的自动化脚本将在启动 Chrome 浏览器时应用这些特定的偏好设置,以提高安全性并避免在自动化过程中处理密码相关的提示。

需要注意的是,prefs 是一个实验性选项,可能会在未来的 Chrome 版本中被删除或更改。因此,同样需要注意 Selenium 和 Chrome 浏览器版本的兼容性。

4.option.add_argument('--disable-blink-features=AutomationControlled')

这行代码是将 --disable-blink-features=AutomationControlled 参数添加到 ChromeOptions 中。这个参数的作用是禁用 Chrome 浏览器中与自动化控制相关的特性,通常是为了规避某些网站对自动化测试或爬虫的检测。

在过去,Chrome 浏览器中的一些 Blink 引擎特性(也称为 Blink Features)可以被网站用来检测是否由自动化控制。通过使用 --disable-blink-features=AutomationControlled 参数,你可以禁用这些与自动化相关的特性,从而避免被网站识别为自动化程序。

需要注意的是,--disable-blink-features=AutomationControlled 参数也是一个实验性选项,可能会在未来的 Chrome 版本中被删除或更改。因此,使用该参数时,你需要关注 Selenium 和 Chrome 浏览器版本的兼容性。

综合来说,这行代码的作用是增加 Selenium 自动化测试或网页爬取的安全性,使其更隐蔽地模拟真实用户的行为。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值