无法使用我的脚本进入网页

时间:2017-10-26 06:18:19

标签: python python-3.x selenium web-scraping captcha

我已经在python中用selenium编写了一个脚本来进入一个网页并从中删除一些名字。但是,当我进入网页时,它需要浏览器进行人工验证测试以解决验证码。我试着勾选验证码旁边的方框,但它似乎根本不起作用。在这种情况下,如何进入网页并获取一些名称?

这是我到目前为止所尝试的:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(link_given_below)

try:
    wait.until(EC.presence_of_element_located((By.ID, "recaptcha-anchor"))).click()
except:pass

for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".row .h4"))):
    print(item.text)

driver.quit()

要在刮刀中使用的链接This_One

嵌入式验证码中的元素:

<div class="rc-anchor-content"><div class="rc-inline-block"><div class="rc-anchor-center-container"><div class="rc-anchor-center-item rc-anchor-checkbox-holder"><span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-hover" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" role="presentation"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation"></div><div class="recaptcha-checkbox-spinner" role="presentation"></div><div class="recaptcha-checkbox-spinnerAnimation" role="presentation"></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span></div></div></div><div class="rc-inline-block"><div class="rc-anchor-center-container"><label class="rc-anchor-center-item rc-anchor-checkbox-label" aria-hidden="true" role="presentation" id="recaptcha-anchor-label"><span aria-labelledby="recaptcha-accessible-status"></span>I'm not a robot</label></div></div></div>

4 个答案:

答案 0 :(得分:2)

下面是示例代码,用于选中将触发重新捕获图像的复选框。

url = "https://www.google.com/recaptcha/api2/demo"
driver.get(url)

driver.switch_to.frame(driver.find_element_by_xpath("//iframe[starts-with(@name,'a-')]"))
# update the class name based on the UAT implementation (if it's different)
driver.find_element_by_class_name("recaptcha-checkbox-border").click()

但是您仍然必须完成图像选择/使用语音文本api来解决验证码。 可能的选择是使用第三方API或检查truepeoplesearch中是否有可用的API,您可以在其中获取所需的信息作为响应。

编辑1:使用API​​和html解析器。


url = "https://www.truepeoplesearch.com/results?name=John%20Smithers"

payload = {}
headers= {}

response = requests.request("GET", url, headers=headers, data = payload)

html_content = response.text.encode('utf8')
# now you can load this content into the lxml.html parser and get the information

html_content = response.text.encode('utf8')
root=lxml.html.document_fromstring(html_content)
content=root.xpath("//div[@class='h4']") # here I am get the names
for name in content:
    print(name.text_content() + '\n')

答案 1 :(得分:2)

如果您正在开发此网站的团队中,则可以与开发人员就有效的验证码方法达成共识。
例如,他们可以在代码中加上一个大小写,如果只有一个您和​​他们都知道的cookie且名称难以猜测,则不会显示验证码。可能有人会猜到该cookie,但是如果您别无选择,则可以选择这种方式。

您还可以使用单独的密钥来测试环境,如here所述。

答案 2 :(得分:2)

您可以使用PyMouse程序包(python package here)移动到网页上对象的(x,y)位置并模拟鼠标单击。

from pymouse import PyMouse

mouse = PyMouse()
def click(self, x,y):
    """Mouse event click for webdriver"""
    global mouse
    mouse.click(x,y,1)

答案 3 :(得分:0)

CAPTCHA用于阻止网站自动化和这就是为什么它不能用硒自动化的原因。因为同样的原因,你无法选择CAPTCHA勾选框。有关详细信息,请参阅以下链接:https://sqa.stackexchange.com/questions/17022/how-to-fill-captcha-using-test-automation