淘宝的反爬虫机制如果更强大那么该文章方法也没用了,记录于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
包含两个键值对:
-
'credentials_enable_service': False
: 这个键值对用于禁用 Chrome 浏览器的凭据服务,也就是浏览器中的保存密码功能。将其设置为False
可以防止 Chrome 浏览器保存和自动填充密码,以增加安全性。 -
'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 自动化测试或网页爬取的安全性,使其更隐蔽地模拟真实用户的行为。