这个问题与其他问题类似,但其他解决方案似乎都不起作用。 在网站'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/