Python Selenium ElementNotInteractableException:消息:元素不可交互

时间:2020-06-13 23:49:43

标签: python selenium web-scraping beautifulsoup

我正在尝试登录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)

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

3 个答案:

答案 0 :(得分:0)

要提供用户名,请尝试以下xpath:

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

输入密码:

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

答案 1 :(得分:0)

如果您使用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 :(得分:0)

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给出的上述解决方案奏效了! :)