首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python selenium处理模态登录

如何使用python selenium处理模态登录
EN

Stack Overflow用户
提问于 2022-09-15 20:56:53
回答 1查看 84关注 0票数 0

我试图使用登录到一个网站。但是登录在引导模式对话框中,我无法使用我的代码成功登录。有人能告诉我我的密码出了什么问题吗?

我尝试了以下代码:

代码语言:javascript
复制
import requests
import time
import os, sys

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains

gecko = os.path.normpath(os.path.join(os.path.dirname(__file__), 'geckodriver'))
binary = FirefoxBinary(r'C:/Program Files/Mozilla Firefox/firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary, executable_path=gecko +'.exe')
driver.maximize_window() 
wait = WebDriverWait(driver, 10) 
time.sleep(1)

pageurl = "https://www.producemarketguide.com"
driver.get(pageurl)

popup = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="close-dialog"]')))
popup.click()

time.sleep(2)
login = wait.until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[1]/header/div/div[2]/div[2]')))
login.click()

user = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/app-main/app-widget/screen-layout/main/current-screen/div/screen-login/p[3]')))
user.send_keys('xxx@gmail.com')

password = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/app-main/app-widget/screen-layout/main/current-screen/div/screen-login/p[4]/input')))
password.send_keys('XXXX')

submit = wait.until(EC.element_to_be_clickable((By.XPATH, '/html/body/app-main/app-widget/screen-layout/main/current-screen/div/screen-login/p[6]/button')))
submit.click() 

我得到的错误信息是

代码语言:javascript
复制
Traceback (most recent call last):                                                          
  File "pmg.py", line 34, in <module>                                                       
    user = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/app-main/app-widget/screen-layout/main/current-screen/div/screen-login/p[3]')))                             
  File "C:\Program Files\Python38\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until                                                                              
    raise TimeoutException(message, screen, stacktrace)                                     
selenium.common.exceptions.TimeoutException: Message: 
EN

回答 1

Stack Overflow用户

发布于 2022-09-16 14:52:37

该模式对话框是一个iframe,因此您需要切换到iframe以输入凭据,请尝试以下代码:

代码语言:javascript
复制
accept_cookies = driver.find_element(By.CSS_SELECTOR, "button#onetrust-accept-btn-handler")
if accept_cookies.is_displayed():
    accept_cookies.click()
else:
    print("Accept Cookies button not displayed")

popup_dialog = driver.find_element(By.ID,"popup-dialog-window")
close_icon = driver.find_element(By.ID, "close-dialog")
if popup_dialog.is_displayed():
    close_icon.click()
else:
    print("Welcome dialog not displayed")

time.sleep(1)
# Clicking Login/Register link
driver.find_element(By.CSS_SELECTOR, ".user-login.user-login-front.pull-right #user-piano-login-register").click()
time.sleep(1)

# Switch to the login dialog iframe
driver.switch_to.frame(driver.find_element(By.XPATH,".//iframe[starts-with(@id,'piano-id-')]"))

# enter the credentials and click Login button
driver.find_element(By.XPATH,".//input[@fieldloginemail]").send_keys("emailid")
time.sleep(0.5)
driver.find_element(By.XPATH,".//input[@fieldloginpassword]").send_keys("password")
time.sleep(0.5)
driver.find_element(By.XPATH,".//button[@actionlogin]").click()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73737356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档