我正在尝试更改表单中的元素,后面的输入选项取决于前面的输入选项。我可以使用这种方法为早期的选择器选择选项,但对于这个特定的选择器,它会单击对象(我可以看到文本更改(,然后返回。
因此,我相当确定我的id是正确的,因为它确实找到并选择了当前元素,但我需要帮助来弄清楚为什么该选项不会保持。
wait = WebDriverWait(driver,20).until(EC.presence_of_element_located(
(By.XPATH, 'xpath/option[2]')))
select = Select(driver.find_element_by_xpath('xpath'))
select.select_by_value(code)
我尝试过通过索引、可见文本进行选择,并使用click((方法通过id进行查找,但都不允许保留我的选项选择。当我手动进入表单时,我的选项选择将保持不变。此外,在BeautifulSoup中,我似乎也无法发布到选择器。
很乐意帮助探索为什么会发生这种情况!谢谢
编辑:问题不在于没有找到选项。我找到了选项,并且我能够选择该选项。当查看网络标头中的表单数据时,我可以看到我试图输入与手动相同的信息。
但是,在我选择该选项后不到一秒钟,选择器就会返回到其原始状态。
要与html select标记交互,您需要诱导WebDriverWait等待element_to_be_clickable()
,您可以使用以下定位器策略之一:
-
使用
select_by_visible_text()
:Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "id_name")))).select_by_visible_text("option_text")
-
使用
select_by_value()
:Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "id_name")))).select_by_value("option_value")
-
使用
select_by_index()
:Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "id_name")))).select_by_index(index)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC