【问题标题】:Selenium Python: Unable to select combo valueSelenium Python:无法选择组合值
【发布时间】:2015-12-25 11:33:36
【问题描述】:

我正在访问这个page,我必须选择一个显示现有简历的组合值。我收到错误:

selenium.common.exceptions.ElementNotVisibleException:消息: 元素当前不可见,因此可能无法与之交互

我正在尝试的代码是:

from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep
from bs4 import BeautifulSoup
driver = webdriver.Firefox()
driver.get('https://www.glassdoor.com/job-listing/developer-one-north-interactive-JV_IC1128808_KO0,9_KE10,31.htm?jl=1584069572')
select_box = driver.find_element_by_id('ExistingResume')
select_box.click();
select_box = Select(select_box)
sleep(5)
select_box.select_by_value(RESUME_TEXT_VALUE)

更新需要的元素就在那里

更新 #2:检查该元素在静态 html 中不可见。通过正在加载的 JS 进行猜测。

更新#3:好的,我做了以下更改,打印标签名称为select

select_box = driver.find_element_by_id('ExistingResume')
print(select_box.tag_name)

现在的任务是从该组合中选择值

【问题讨论】:

  • 因为没有名为ExistingResume的元素...我只能找到一个名为ExistingResumeCount的元素。
  • @KevinGuan 检查更新#3

标签: python selenium


【解决方案1】:

您可以使用Keys.ARROW_DOWN 获取选项并使用Keys.RETURN 进行选择。见下文:

>>> from selenium.webdriver.common.keys import Keys
>>> driver.find_element_by_id("ExistingResumeSelectBoxIt").click()
>>> d = driver.find_element_by_id("ExistingResumeSelectBoxIt")
>>> d.send_keys(Keys.ARROW_DOWN)
>>> d.send_keys(Keys.RETURN)
>>> driver.find_element_by_id("ExistingResumeSelectBoxIt").text
u'mesut gunes resume eng.pdf'

您必须登录并拥有一份简历。

【讨论】:

  • Keys 未解决。需要导入哪个类?
  • 你导入了from selenium.webdriver.common.keys import Keys 吗?
  • 像魅力一样工作!!如果组合中有 3 个简历,我需要发送 3 个 Keys.Array_Down 然后返回吗?
【解决方案2】:

错误信息足够清晰。问题是网站上没有 id 为“ExistingResume”的元素。

如果您在浏览器中打开控制台并输入 $("#ExistingResume"); jQuery 也无法在网站上找到该元素。

确保您没有在 id 中打错字,或者您拥有访问该元素的所有必要权限。 (也许它只对登录用户可见。)

【讨论】:

  • 该元素不是仅对具有正确权限的登录用户可见吗?
  • 我猜是这样,但我先登录
  • 好像是通过JS加载的
【解决方案3】:

首先,您必须登录并拥有至少一份已上传的简历。


您不能使用简历直接控制select 元素 - 它是不可见的。控制可见的包装组合元素。

完整的工作代码(包括登录):

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


driver = webdriver.Firefox()
driver.get('https://www.glassdoor.com/job-listing/developer-one-north-interactive-JV_IC1128808_KO0,9_KE10,31.htm?jl=1584069572')

# log in
driver.find_element_by_css_selector("div.actions span.signin").click()

driver.find_element_by_css_selector("form.signInForm input.signin-email").send_keys("login")
driver.find_element_by_css_selector("form.signInForm input.signin-password").send_keys("password")
driver.find_element_by_css_selector("form.signInForm button.loginDlgSignInBtn").click()

# wait for the combo to appear
resume_name = "myResume.pdf"

# open up combo
combo = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "ExistingResumeSelectBoxIt")))
combo.click()

# select resume
resume_item = combo.find_element_by_xpath("//li[@data-val = '%s']" % resume_name)
resume_item.click()

【讨论】:

  • 我已登录并在尝试您的代码后得到:``` selenium.common.exceptions.NoSuchElementException: 消息:无法找到元素:{"method":"xpath","selector ":"//span[@id='ExistingResumeSelectBoxItText' and @data-val = ```
  • @Volatil3 你确定你使用的是现有的resume_name吗?谢谢。
  • 确实存在。现在我不确定它是完全匹配还是忽略空格。
  • @Volatil3 好的,让我尝试重现问题
  • @Volatil3 好的,更新了完整的工作代码以按名称选择简历
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多