编辑:这是演示该问题的 YouTube 视频:
我正在使用 --headless 标志与 chrome 一起运行 selenium,但显然使用 --headless 似乎会忽略系统代理。我之前在 Mac 上测试过它,它没有绕过代理,但在我的 Mac 上的 Windows 10 VM 上,它似乎绕过了代理。
代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--hide-scrollbars')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options = options)
driver.get('https://wtfismyip.com')
print(driver.find_element_by_tag_name('body').text)
如果我不使用 headless 标志。 它显示系统代理的 IP,但如果使用它,它会显示我的真实 IP。
最佳答案
造成这种情况的原因可能有多种: 如果我不得不猜测这是IP泄漏。低质量代理不会在各种网站上屏蔽您的 IP。 whoer.net是一个测试IP泄漏的好网站。 IP 地址只是因素之一,您还必须考虑浏览器指纹识别和用户代理欺骗。理想情况下,您希望 whoer.net 具有 100% 的匿名评级。
此外,请确保您安装了最新的 Chrome 和 Firefox。
我已经测试了你的代码并且它有效。也许通过公共(public)代理提供您的完整代码可能会帮助其他人完全按照您所看到的方式复制您的工作。我只能猜测您如何使用代理,因此我的代码可能会有所不同。我也在用windows
据我所知,您提供的代码似乎没有任何问题,因此我假设您的 IP 正在通过其他方式泄漏。研究浏览器指纹识别并禁用 webrtc,并仔细查看 whoer.net。
最后,Chrome 和 Firefox 的测试版现已提供 headless 支持。我相信 Linux 一直都是这样。 Mac 我对此不确定。
或者,如果您想使用 headless 浏览器,请尝试 phantom Js。尽管这正在被我上面提到的内容所取代。我相信有其他方法可以实现 headless 浏览,而无需安装较新版本的 Chrome 和 Firefox,尽管我不知道如何实现。
编辑: 以下是如何通过 Chrome 驱动程序使用代理的示例:
from selenium import webdriver
PROXY = "23.23.23.23:2323" # IP:PORT or HOST:PORT
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)
chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("http://whatismyipaddress.com")
我在 Selenium 中尝试过这个,据我所知它有效。
这是公共(public)代理的列表。 https://free-proxy-list.net/ 。请注意,其中很多都不起作用,所以我不得不滚动浏览 3 个直到它们起作用。我认为没有必要更改代理的网络设置,只需使用上面的代码即可。
希望这对您有帮助。
关于python - Chrome headless 忽略系统代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45976691/