所以我尝试通过SMS
使用this网站发送Selenium
。
选择我的国家/地区和我的电话号码后,我有Captcha
:
因此,Selenium
我成功点击此Checkbox
,但总是得到image verification
:
我尝试在Checkbox
点击之前进行多次睡眠,但此image verification
仍然存在。
这种行为不是通过手工制作的,所以我的问题是为什么会发生这种情况?
这就是我找到元素的方法,然后点击Captcha
复选框:
IWebElement frame = driver.FindElements(By.XPath("//iframe[contains(@src, 'recaptcha')]"))[0];
driver.SwitchTo().Frame(frame);
IWebElement checkbox = Driver.Browser.FindElement(By.CssSelector("div.recaptcha-checkbox-checkmark"));
checkbox.click();
答案 0 :(得分:2)
这是机器人做的captcha's
的全部要点 - 不通过某个点/抓取网页;当网站怀疑机器人活动时会出现这种情况,这样才能确保人类在另一侧显示这些图像;这样只允许人类进一步活动。
当您尝试手动执行此操作时,您不会获得这些图像是因为您在浏览器的本地安装上验证了这一点,这些浏览器会不断保存有关您活动的Cookie;但是当你通过Selenium WebDriver
启动同一个屏幕时,会启动一个新的实例并确保实例/会话是合法的;网站可以要求captcha
个详细信息,
但是为了规避这种情况,您可以尝试使用已经回答问题的相同会话,您可以使用DesiredCapabilities
中的selenium
执行此操作,请google了解更多信息。
答案 1 :(得分:0)
取出超越硒的一面,使用Sikuli http://www.sikuli.org/点击按钮并做你的东西使用Sikuli的Java Api而不是IDE并使用相对区域。
如上所述,如果你也有Dev的范围, 与开发者交谈并关闭流程中的Captcha
答案 2 :(得分:0)
导入你项目中的sikuli jar并使用如下代码
package com.test;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Screen;
public class CaptchaCick{
public static void main(String[] args) throws FindFailed, InterruptedException {
// TODO Auto-generated method stub
Screen s=new Screen();
s.find("source.png");
s.click(("source.png");
System.out.println("Source image found");
}
}
答案 3 :(得分:0)
尝试登录到旧的gmail帐户,然后尝试自动单击Recaptcha