我正在尝试为https://www.phonehouse.nl/verlengchecker做一个机器人。但是当我使用Chrome时,它会被检测到。当我使用Firefox时,它只会打开页面,不会执行任何操作。我在Arch Linux和Windows上尝试过,结果是一样的。
from selenium import webdriver
from time import sleep
capabilities = {
'browserName': 'chrome',
'chromeOptions': {
'useAutomationExtension': False,
'forceDevToolsScreenshot': True,
'args': ['--start-maximized', '--disable-infobars']
}
}
driver = webdriver.Chrome(capabilities=capabilities)
def control(provider, number, day, month, year, post, email, street):
driver.get("https://www.phonehouse.nl/verlengchecker")
sleep(1)
driver.find_element_by_xpath("//span[@id='businessSelectBoxIt']").send_keys(provider) #provider
driver.find_element_by_xpath("//input[@name='msisdn']").send_keys(number) #number
答案 0 :(得分:1)
您的分析方向正确。 Selenium驱动的ChromeDriver启动的google-chrome 浏览上下文可以很容易地被recaptcha检测到。
如果您访问DOM Tree,则会发现recaptcha的存在。
Recaptcha可以轻松检测到WebDriver启动的浏览上下文。
您可以在How does recaptcha 3 know I'm using selenium/chromedriver?
中找到详细的讨论
不过,有一些通用的方法可以避免检测,您可以在How to bypass Google captcha with Selenium and Python?中找到详细的讨论
您可以在以下位置找到相关的详细讨论:
答案 1 :(得分:0)
好吧,“提供者”不是输入,因此您不能使用send_keys
,
但是您可以使用此数字:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
def control(number):
driver.get("https://www.phonehouse.nl/verlengchecker")
sleep(1)
driver.find_element_by_xpath('//*[@id="msisdn"]').send_keys(number)
control("000")