python-3.x - 在 python 中使用 selenium 处理弹出窗口
问题描述
我正在做网页抓取并尝试通过 selenium chromedriver 登录。登录页面有 3 个字段用户名、密码和验证码。如果输入的验证码不正确,我pytesseract
会绕过验证码并使用无限循环登录,但我收到UnexpectedAlertPresentException: Alert Text: Invalid captcha characters please enter again Message: unexpected alert open: {Alert text : Invalid captcha characters please enter again}
错误。
自动登录的代码是:
while(1):
pytesseract.pytesseract.tesseract_cmd = r"C:\Users\ankit19.gupta\AppData\Local\Programs\Tesseract-OCR\tesseract.exe"
img = driver.find_element(By.XPATH,"//form[@id='form1']/div[4]/div/div/div/div[3]/div[2]/div[3]/div/img")
#get_captcha(driver, img, "captcha.png")
location = img.location
size = img.size
#saves screenshot of entire page
driver.save_screenshot("captcha.png")
image = Image.open("captcha.png")
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']
image = image.crop((left, top, right, bottom)) # defines crop points
image.save("captcha.png", 'png') # saves new cropped image
captcha = pytesseract.image_to_string(image)
captcha = captcha.replace(" ", "").strip()
txtUserName="user"
txtPassword = "pwd"
query = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@id='txtUsername']")))
query.send_keys(txtUserName)
query = wait.until(EC.presence_of_element_located((By.XPATH,"//input[@id='txtPassword']")))
query.send_keys(txtPassword)
query = wait.until(EC.presence_of_element_located((By.XPATH,"//input[@id='txtinput']")))
query.send_keys(captcha)
element=wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@id='btnSubmit']")))
element.click()
get_url=driver.current_url
print(get_url)
if get_url == 'home_page_url':
break
else:
sleep(5)
driver.switch_to_alert().accept()
print(driver.current_url)
driver.get("login_page_url")
print(driver.current_url)
对于错误输入的验证码,使用函数点击了弹出窗口,accept()
但在上面的 else 部分,我写了一些print
语句来检测哪个语句不能正常工作,所以,当验证码错误时,我看不到 else 部分没有打印任何内容输入并且,用户名和密码也不会自动输入,这应该由于无限循环而完成,但对于正确输入的验证码,print
语句工作正常。
所以,如果可以的话,谁能帮我解决这个错误。
任何帮助,将不胜感激。
解决方案
推荐阅读
- javascript - JavaScript / Lit-element 安全的 HTML 解析方式
- amazon-web-services - 使用 .NET Core 3.1 在 AWS Lambda 函数上发布代码后上传时文件损坏且大小增加
- binary - 将二进制坐标转换为十进制 ASN.1 UPER
- snowflake-cloud-data-platform - 您能否将 Snowflake 安全集成与 Tableau 配置为仅允许特定角色?
- c++ - Cuda 纹理缓存不会在每次内核启动时刷新
- c# - 如何使用 HttpClient 更改主机名(主机 http 标头)
- python - 如何修复 Facebook 检测到 MyAppName 未使用安全连接传输信息
- r - 如何使用步骤在 R 中显示 aa 图
- python - BiqQuery 将“字节”列拆分为行
- python - 我的第一个重命名文件名项目的问题