python - 如何使用 selenium+tor+firefox 按多个键(COMMAND、SHIFT、l)?
问题描述
我在 tor 上抓取一个网站。他们在大约一千个请求后阻止了我正在抓取的 IP 地址。我有大约 20 万个请求要发出,所以我试图在每次浏览器被阻止时自动创建一个新电路,否则保持不变。
通常我可以使用 COMMAND+SHIFT+l 创建一个新电路。但是,这不适用于我的代码。
我正在创建我的驱动程序并按如下方式按键:
binary = FirefoxBinary("/Applications/Tor Browser.app/Contents/MacOS/firefox")
driver = webdriver.Firefox(firefox_binary = binary)
driver.get("https://torproject.com/")
actions = ActionChains(driver)
actions.key_down(Keys.COMMAND).key_down(Keys.SHIFT).send_keys('l').perform()
我也尝试过使用actions.send_keys(Keys.COMMAND, Keys.SHIFT, 'l').perform()
和actions.key_down(Keys.COMMAND).send_keys(Keys.SHIFT, 'l').perform()
语法似乎确实在按下键,因为我可以做到actions.send_keys(Keys.SPACE).perform()
并且页面向下滚动。
我在 MacOS、firefox 85.0.2、selenium 3.141.0、geckodriver 0.29.0
我在 geckodriver 中找不到任何相关的错误。
解决方案
我建议您,因为您使用的是 MacOS 并且它基于 Unix,所以通过终端以编程方式启动命令而不是模拟按下快捷键来更改 TOR 电路。
看看这里:链接
它写道:“如果你想强制 Tor 生成一个新电路,从而生成一个新 IP,请使用以下命令:echo -e 'AUTHENTICATE ""\r\nsignal NEWNYM\r\nQUIT' | nc 127.0.0.1 9051
”
推荐阅读
- ms-access - 在 MS Access 中使复选框大小变大
- python - 根据另一列中的值将多列设置为零
- c# - Open API (Swagger) 路由命名约定
- c++ - 未调用继承的模板构造函数
- python - 如何将一个简单的系列转换为 Keras LSTM?
- r - 将函数应用于 R data.frame 中另一列的一系列值以使其保持矢量化的最佳方法是什么?
- apache2 - magento2 板没有正确显示
- c++11 - emplace_back 是否在其新位置构造对象而不是使用移动?
- javascript - removeAttribute 不删除 CSS 样式
- node-red - Node-Red 和物联网