javascript - 在python中使用selenium,如何绕过 "Message: Element is not currently visible"?

标签 javascript python selenium

这个问题与其他问题类似,但其他解决方案似乎都不起作用。 在网站'http://www.ncbi.nlm.nih.gov/pubmed/ ',搜索文本后,您有机会“按最新值排序”。我想选择这些值之一。 这是我的代码,其中包括我尝试解析的网站:

from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

SearchTerm = raw_input("Enter search terms: ")
display = Display(visible=0, size=(1024, 768))
display.start()
browser = webdriver.Firefox()
browser.get("http://www.ncbi.nlm.nih.gov/pubmed/")
assert "PubMed" in browser.title

elem = browser.find_element_by_id("term")
elem.send_keys(SearchTerm)
elem.send_keys(Keys.RETURN)

elem = browser.find_elements_by_xpath("//a[@name='EntrezSystem2.PEntrez.PubMed.Pubmed_ResultsPanel.Pubmed_DisplayBar.Display']")[2].click()
#wait = WebDriverWait(browser, 10)
#wait.until(EC.presence_of_element_located((By.XPATH, "//div/fieldset/ul/li/input[contains(@id='PublicationDate')]"))).click()
elem = browser.find_element_by_id('PublicationDate').click()

使用此代码,我收到“消息:元素当前不可见”错误。

如果我删除包含行的等待前面的注释标记(靠近底部),并改用行,它会等待指定的 10 秒并最终产生错误:“raise TimeoutException(message, screen, stacktrace)”

如何访问这些似乎通过 JavaScript 显示的值?

最佳答案

添加隐式等待并使用不同的 xpath 搜索似乎对我来说效果很好。以下是首先按相关性排序,然后按第一作者排序的示例。因为我在 Windows 上,所以我注释掉了虚拟显示。

尝试以下操作。

from selenium import webdriver
# from pyvirtualdisplay import Display
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

SearchTerm = raw_input("Enter search terms: ")
# display = Display(visible=0, size=(1024, 768))
# display.start()
browser = webdriver.Firefox()
browser.get("http://www.ncbi.nlm.nih.gov/pubmed/")
assert "PubMed" in browser.title

browser.implicitly_wait(10)

elem = browser.find_element_by_id("term")
elem.send_keys(SearchTerm)
elem.send_keys(Keys.RETURN)

elem = browser.find_elements_by_xpath("//a[starts-with(text(),'Sort by')]")[0].click()
elem = browser.find_elements_by_xpath("//label[contains(text(),'Relevance')]")[0].click()

elem = browser.find_elements_by_xpath("//a[starts-with(text(),'Sort by')]")[0].click()
elem = browser.find_elements_by_xpath("//label[contains(text(),'First Author')]")[0].click()

关于javascript - 在python中使用selenium,如何绕过 "Message: Element is not currently visible"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195555/

相关文章:

java - 为什么 HtmlUnitDriver 不执行 JavaScript?

javascript - 是否有任何选项可以打印 c3js 生成的图表?

javascript - 通过原型(prototype)和类属性定义函数有什么区别?

python - PyDAQmx 或类似软件适用于 Mac 吗?

python - Tensorflow dataset.batch() 不显示真实的批量大小

Selenium 独立服务器在启动时挂起

javascript - 我想要一键实现两种功能

javascript - 类型错误 : [API] is undefined in content script or Why can't I do this in a content script?

python - 删除数据框中的重复项?

java - Selenium - 存储隐藏变量