我正在使用Python和Selenium编写自动化脚本,但在最后一步遇到了问题,因为之前的步骤中有一个带有验证码的提交按钮,所以表单被提交了。我考虑直接将验证码响应负载到网站上,但我没有找到任何方法来实现这一点。
我正在使用2captcha自动解决。
我找到了这个视频,可以提交验证码,我查看了代码,但无法确定它是否适用于我的代码https://www.youtube.com/watch?v=lnmtqPam1qg 以下是与此问题相关的代码部分。
然后使用Selenium找到它并点击()
我正在使用2captcha自动解决。
我找到了这个视频,可以提交验证码,我查看了代码,但无法确定它是否适用于我的代码https://www.youtube.com/watch?v=lnmtqPam1qg 以下是与此问题相关的代码部分。
def captchaHome():
driver.execute_script('var element=document.getElementById("g-recaptcha-response"); element.style.display="";')
service_key = 'xxxxxxxxxxxxxxxxxxxxxx' # 2captcha service key
google_site_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' # reCAPTCHAのdata-sitekey
pageurl = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
url = "http://2captcha.com/in.php?key=" + service_key + "&method=userrecaptcha&googlekey=" + google_site_key + "&pageurl=" + pageurl
resp = requests.get(url)
if resp.text[0:2] != 'OK':
quit('Service error. Error code:' + resp.text)
captcha_id = resp.text[3:]
fetch_url = "http://2captcha.com/res.php?key=" + service_key + "&action=get&id=" + captcha_id
for i in range(1, 10):
time.sleep(10) # wait 10 sec.
resp = requests.get(fetch_url)
if resp.text[0:2] == 'OK':
break
print('Google response token: ', resp.text[3:])
return resp.text[3:]
capHome = captchaHome()
driver.find_element_by_id('g-recaptcha-response').send_keys(capHome)
这是我想提交的网站上的代码
function show(classNames) {
classNames.forEach(function(className) {
document.querySelector(className).classList.remove('hidden');
});
}
function hide(classNames) {
classNames.forEach(function(className) {
document.querySelector(className).classList.add('hidden');
});
}
function showAnimation() {
hide(['.challenge', '.error', '.success']);
show(['.redeem', '.animation']);
}
function showSuccess() {
hide(['.challenge', '.error']);
show(['.redeem', '.success', '.animation']);
}
function showError() {
hide(['.challenge', '.success', '.animation']);
show(['.redeem', '.error']);
}
// used in data-callback
function redemptionValidation(captchaResponse) {
showAnimation();
function reqListener() {
if (this.status >= 200 && this.status < 400) {
var redirectUrl = this.responseText;
showSuccess();
setTimeout(function() {
window.location.replace(redirectUrl);
}, 3000);
} else {
showError();
}
}
function reqErrListener() {
showError();
}
var req = new XMLHttpRequest();
req.addEventListener('load', reqListener);
req.addEventListener('error', reqErrListener);
req.open('POST', '/googlehome/redeem/getcode/');
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send('g-recaptcha-response=' + encodeURIComponent(captchaResponse));
}
我想在没有提交按钮的情况下提交验证码,以便它可以将我重定向到下一步。
编辑:
我正在考虑将提交按钮载入到网站中,但我找不到任何方法来实现这一点,类似于这样的操作。
// 1. Create the button
var button = document.createElement("button");
button.innerHTML = "Do Something";
// 2. Append somewhere
var cap = document.getElementsByTagName("body")[0];
cap.appendChild(button);
然后使用Selenium找到它并点击()