蟒蛇硒。元素不可交互

时间:2021-05-16 19:46:15

标签: python html selenium xpath

我正在尝试填写 (https://all-access.wax.io) 上的表格。当我使用 Javascript

document.getElementsByName("userName")[0].value = "Hello",然后我就可以将文本写入表单。但是,当我在 selenuim 中使用相同的概念时

driver.find_element_by_name("userName").send_keys("Hello"),然后我得到:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

当我执行时: self.driver.find_element_by_name("userName")[1].send_keys("Hello") 这导致:​​

TypeError: 'WebElement' object is not subscriptable

我也尝试过等到内容加载完毕,以及使用 XPath 和其他选择器。我想我犯了一个简单的错误,但我已经好几个小时无法解决它了。

重现问题的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://all-access.wax.io')
browser.find_element_by_name("userName")[1].send_keys("hello")
print()

3 个答案:

答案 0 :(得分:2)

CustomScrollView(
  SliverAppBar(),
  ...
  ValueListenableBuilder(
    valueListenable: _list,
    builder: (context, listBuilder, child) {
      return SliverGrid(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
          mainAxisSpacing: 16.0,
          crossAxisSpacing: 16.0,
          childAspectRatio: 635 / 889,
        ),
        delegate: SliverChildBuilderDelegate(
          (c, i) {
            return ItemWidget(listBuilder[i]);
          },
          childCount: _list.value.length,
        ),
      );
    },
  ),
)

您想将 send_keys 发送到第二个输入标签而不是第一个。

答案 1 :(得分:1)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get('https://all-access.wax.io')
browser.find_element_by_name("userName").send_keys("hello")
print()

您正在使用 find_element 返回 webelement 而不是 array ,请使用 find_elements 或删除索引

答案 2 :(得分:1)

只有 name 属性的方法对我不起作用,因为当您尝试使用 [1] 访问时,仍有两个元素,因此定位器不是唯一的。 因此,我使用了父 pannels visible-desktop-only-flex 类并添加了显式等待。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')


browser.get('https://all-access.wax.io')
wait = WebDriverWait(browser, 15)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='pannels visible-desktop-only-flex']//input[@name='userName']")))
browser.find_element_by_xpath("//div[@class='pannels visible-desktop-only-flex']//input[@name='userName']").send_keys("hello")