【问题标题】:Python selenium ElementNotInteractableException: Message: element not interactablePython selenium ElementNotInteractableException:消息:元素不可交互
【发布时间】:2020-06-17 22:54:14
【问题描述】:

我正在尝试登录 beeradvocate.com 以抓取(抓取)一些啤酒数据。 我尝试使用硒,但一直失败。

这里是html

<input type="text" name="login" value="" id="ctrl_pageLogin_login" class="textCtrl" tabindex="1" autofocus="autofocus" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=&quot;); cursor: auto;">

我尝试使用名称、值和类,但一切都失败了。 我尝试了 Xpath 作为我的最后一次尝试,但也失败了。

website and inspection

我的代码:

driver=webdriver.Chrome("~~~~\\chromedriver.exe")
driver.get("https://www.beeradvocate.com/community/login/")

from selenium.common.exceptions import TimeoutException

driver.maximize_window()

    while True:
        try: 
            WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="ctrl_pageLogin_login"]'))).send_keys("scentmaster")
            break
        except TimeoutException: 
            print("too much time")

我已经让按钮工作了:

button = driver.find_element_by_xpath('//*[@id="pageLogin"]/dl[3]/dd/input')
driver.execute_script("arguments[0].click();", button)

但是,我需要能够执行 sent_keys 以输入 id 和 pw 以登录... 有人知道吗?

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup


    【解决方案1】:

    如果您使用xpath //*[@id = "ctrl_pageLogin_login"],页面上有2个字段,您所指的input字段是第二个。可悲的是,默认情况下,硒 find element 指的是第一个。如果你这样做,它将起作用:(//*[@id = "ctrl_pageLogin_login"])[2]

    但我有另一个建议,尝试通过具有此值的 css 选择器定位元素:form#pageLogin input#ctrl_pageLogin_login

    WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'form#pageLogin input#ctrl_pageLogin_login'))).send_keys("scentmaster")
    
    #for password
    driver.find_element_by_css_selector('form#pageLogin input#ctrl_pageLogin_password').send_keys('your_password')
    
    #for submit
    driver.find_element_by_css_selector('form#pageLogin input[type=submit]').click()
    

    【讨论】:

    • 非常适合我。非常感谢您解决了我的问题。
    【解决方案2】:

    要输入用户名,试试这个 xpath:

    '//form/dl/dd/input[@id="ctrl_pageLogin_login"]'
    

    密码:

    '//form/dl/dd/input[@id="ctrl_pageLogin_password"]'
    

    【讨论】:

      【解决方案3】:
      WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'form#pageLogin input#ctrl_pageLogin_login'))).send_keys("scentmaster")
      
      #for password
      driver.find_element_by_css_selector('form#pageLogin input#ctrl_pageLogin_password').send_keys('your_password')
      
      #for submit
      driver.find_element_by_css_selector('form#pageLogin input[type=submit]').click()
      

      frianH 给出的上述解决方案奏效了! :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多