+
95
-

回答

在使用 Selenium 进行爬虫时,有些网站可能会使用 JavaScript 的事件机制来实现用户行为的模拟,例如模拟鼠标点击、键盘输入等操作,同时使用 isTrusted 属性来验证事件对象是否来自真实的用户操作。如果 isTrusted 属性为 false,则说明事件对象是由 JavaScript 代码生成的,而不是来自真实的用户操作,这可能会导致爬虫被识别并被阻止访问网站。

要绕过这种 isTrusted 验证,有几种方法可供尝试:

使用 headless 模式:Selenium 支持 headless 模式,即在无头浏览器中运行测试,这样可以绕过大部分 JavaScript 的验证机制。例如,可以使用 Chrome 浏览器的 headless 模式启动 Selenium:

from selenium import webdriver

# 创建 Chrome 浏览器实例
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)


修改事件属性:可以使用 JavaScript 修改事件对象的 isTrusted 属性,将其设置为 true。例如,可以注入以下 JavaScript 代码,将 isTrusted 属性设置为 true:
driver.execute_script('''
function dispatchEvent(element, event) {
event.isTrusted = true;
element.dispatchEvent(event);
}
''')


然后,在模拟用户点击或输入等操作时,使用 dispatchEvent 方法代替 click 或 send_keys 方法,例如:

# 获取搜索框元素
input_box = driver.find_element_by_name('q')

# 创建模拟事件
event = driver.execute_script('return new Event("input")')

# 修改事件属性
driver.execute_script('''
arguments[0].isTrusted = true;
''', event)

# 触发事件
driver.execute_script('''
arguments[0].target.value = arguments[1];
arguments[0].target.dispatchEvent(arguments[1]);
''', input_box, event)


使用第三方库:有些第三方库可以模拟真实的用户操作,绕过 isTrusted 验证。例如,可以使用 pyautogui 库模拟鼠标移动、点击、键盘输入等操作,例如:
import pyautogui

# 获取搜索框元素
input_box = driver.find_element_by_name('q')

# 将光标移动到搜索框
input_box.click()
pyautogui.moveTo(input_box.location['x'] + 10, input_box.location['y'] + 10)

# 输入关键词
pyautogui.typewrite('selenium')

# 模拟回车键
pyautogui.press('enter')


需要注意的是,以上方法都不是绝对可行的,具体效果可能会因网站实现方式和浏览器版本等因素而有所不同,需要根据具体情况进行尝试和调整。同时,也应该遵守相关法律法规和伦理规范,避免对被爬取网站造成不必要的影响。

网友回复

我知道答案,我要回答