我已经在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>
答案 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