在使用 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')
需要注意的是,以上方法都不是绝对可行的,具体效果可能会因网站实现方式和浏览器版本等因素而有所不同,需要根据具体情况进行尝试和调整。同时,也应该遵守相关法律法规和伦理规范,避免对被爬取网站造成不必要的影响。
网友回复
有没有不依赖embedding向量的RAG技术?
有没有支持实时打断语音通话并后台帮你执行任何的ai模型?
开源ai大模型文件格式GGUF、MLX、Safetensors、 ONNX 有什么区别?
出海挣钱支付收款PayPal、Wise 、PingPong、Stripe如何选择?
如何实现类似google的图片隐形水印添加和识别技术?
linux上如何运行任意windows程序?
ai能写出比黑客还厉害的零日漏洞等攻击工具攻击任意软件系统工程?
js如何获取浏览器的音频上下文指纹、Canvas指纹、WebGL渲染特征?
为啥ai开始抛弃markdown文本,重新偏好html文本了?
网站有没有办法鉴别访问请求是由ai操控chrome-devtools-mcp发出的?


