【问题标题】:How click in input with Selenium如何使用 Selenium 点击输入
【发布时间】:2021-05-22 06:54:28
【问题描述】:

我有一个问题,我正在尝试制作一个自动登录到此站点的脚本https://www.nike.com.br/cosmic-unity-153-169-211-324680 问题是,几秒钟后,此页面加载,您必须选择鞋子的尺寸并单击写有“Faça login para comprar”的按钮,好的,在我的机器人点击那里后,它会打开一个弹出窗口,我必须通知我的电子邮件和密码,然后点击登录按钮,问题是我正在尝试,我无法点击输入来填写电子邮件和密码,我也无法点击登录按钮,我相信也许它是因为它在一个div里面

我的代码:

from selenium.webdriver.chrome.options import Options                                           
from selenium.webdriver.support import expected_conditions as EC                                
from selenium.webdriver.common.by import By    
from selenium.webdriver.common.keys import Keys                                                 

option = Options()                              
prefs = {'profile.default_content_setting_values': {'images': 2}}                                
option.add_experimental_option('prefs', prefs)  
driver = webdriver.Chrome(options = option)   
driver.get("https//www.nike.com.br/cosmic-unity-153-169-211-324680")                           
wait = WebDriverWait(driver, 10)                 
wait.untilEC.element_to_be_clickable((By.CSS_SELECTOR, '.cc-allow'))).click()       
wait.until(EC.element_to_be_clickable((By.XPATH, '//label[@for="tamanho__id40"]'))).click()    
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button#anchor-acessar-unite-oauth2'))).click()                                         
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input#9f656f67-dbed-4cda-be83-0d0d0addc6f4'))).send_keys("test@gmail.com")                                             
wait.untillEC.element_to_be_clickable((By.CSS_SELECTOR, 'input#7016e824-f431-43d0-b5c9-d0331c330014'))).send_keys("mypass")                   
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button#a7f38f9a-afd7-42ce-a978-314a7d484343'))).click()

订购此代码并意识到它仅在您打开登录弹出窗口之前有效,之后它会生成此错误:

selenium.common.exceptions.TimeoutException: Message:**

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    该弹出窗口位于 iframe 内,您需要将驱动程序焦点切换到该特定 iframe。

    wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,"nike-unite-oauth2-iframe")))
    

    确保在完成该弹出式开关后切换到 default_content 以继续进行。

    driver.switch_to.default_content()
    

    更新 1:

    driver = webdriver.Chrome("C:\\Users\\etc\\Desktop\\Selenium+Python\\chromedriver.exe")
    driver.maximize_window()
    wait = WebDriverWait(driver, 30)
    driver.get("https://www.nike.com.br/cosmic-unity-153-169-211-324680")
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.cc-allow'))).click()
    wait.until(EC.element_to_be_clickable((By.XPATH, "//label[@for='tamanho__id40']"))).click()
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button#anchor-acessar-unite-oauth2'))).click()
    wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,"nike-unite-oauth2-iframe")))
    wait.until(EC.element_to_be_clickable((By.NAME, 'emailAddress'))).send_keys("test@gmail.com")
    wait.until(EC.element_to_be_clickable((By.NAME, 'password'))).send_keys("mypass")
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[value='ENTRAR']"))).click()
    

    【讨论】:

    • 对不起,我不明白,这将如何添加到我的代码中?
    • 在你跳到那个弹出窗口之前写第一行frame_to_it然后你就可以有电子邮件和密码并点击登录
    • 在我的代码 `wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button#anchor-acessar-unite-oauth2') )).click()`,在我的代码的最后一行我添加了这个driver.switch_to.default_content(),错误是一样的
    • 您能否组装您的解决方案并将其应用于我的代码并将其添加到答案的正文中?因为我不确定我做对了
    • 同样的错误selenium.common.exceptions.TimeoutException: Message: :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2016-09-26
    相关资源
    最近更新 更多