有什么方法可以使用 geckodriver
使selenium脚本在python中无法检测到我用硒刮。我们需要使用任何保护措施以使网站无法检测到硒吗?
答案 0 :(得分:14)
有多种方法可以避免网站检测到硒的使用。
使用Selenium时,默认将navigator.webdriver的值设置为true。此变量将出现在Chrome和Firefox中。此变量应设置为“ undefined”,以避免被检测。
也可以使用代理服务器来避免检测。
某些网站能够使用浏览器的状态来确定您是否正在使用Selenium。您可以将Selenium设置为使用自定义浏览器配置文件来避免这种情况。
下面的代码使用了这三种方法。
profile = webdriver.FirefoxProfile('C:\\Users\\You\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\something.default-release')
PROXY_HOST = "12.12.12.123"
PROXY_PORT = "1234"
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", int(PROXY_PORT))
profile.set_preference("dom.webdriver.enabled", False)
profile.set_preference('useAutomationExtension', False)
profile.update_preferences()
desired = DesiredCapabilities.FIREFOX
driver = webdriver.Firefox(firefox_profile=profile, desired_capabilities=desired)
运行代码后,您将能够手动检查Selenium运行的浏览器现在具有您的Firefox历史记录和扩展名。您还可以在devtools控制台中键入“ navigator.webdriver”以检查其是否未定义。
答案 1 :(得分:1)
检测到硒驱动的 Firefox / GeckoDriver 的事实并不取决于任何特定的 GeckoDriver 或 Firefox 版本。 网站本身可以检测网络流量,并且可以将浏览器客户端即 Web浏览器标识为 WebDriver控制的。 / p>
根据WebDriver Interface
的最新编辑草稿中WebDriver - W3C Living Document的文档,最初设置的 webdriver-active
flag 为 false ,当用户代理受远程控制(即通过Selenium控制时)设置为true。
现在, NavigatorAutomationInformation
界面不应在 WorkerNavigator
上公开。
所以
webdriver
Returns true if webdriver-active flag is set, false otherwise.
位置
navigator.webdriver
Defines a standard way for co-operating user agents to inform the document that it is controlled by WebDriver, for example so that alternate code paths can be triggered during automation.
因此,最重要的是:
硒可以自我识别
但是,一些避免在网络抓取过程中被检测到的通用方法如下:
time.sleep(secs)
的程度。在这里您可以找到有关How to sleep webdriver in python for milliseconds