首页 > 解决方案 > 在 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语句工作正常。

所以,如果可以的话,谁能帮我解决这个错误。
任何帮助,将不胜感激。

标签: python-3.xseleniumselenium-chromedriverpopupcaptcha

解决方案


推荐阅读