我正在尝试使用Selenium来单击:: before选择器中包含的元素,但每次我尝试这样做时,Selenium都会返回NoSuchElementException
。看一些相关的线程,似乎这是预期的行为,原因我并不完全理解(参见一些看似相关的答案:How to click on ::before element; https://groups.google.com/forum/#!topic/selenium-users/ZUi9cenA13o)。请注意,此部分在iframe中不,当人们遇到此类问题时,这似乎是另一个常见问题。
以下是我正在尝试使用的页面的HTML相关部分:
<div class="container">
::before
<div id="ctl00_divPageContent" class="page-content center-block">
<div class="col-xs-12 main remove-padding-sm add-padding-quater-sm-remove-padding-xs add-padding-quater-xs">
<div id="ctl00_ContentPlaceHolder2_upView">
<div class="col-xs-12 remove-padding-xs">
<div class="pull-right">
<div class="modal-dropdown pull-right">
<a data-toggle="dropdown" tabindex="1">
<i class="fa fa-ellipsis-v">
::before
</i>
</a>
<div class="dropdown-menu" role="menu">
<a id="ctl00_ContentPlaceHolder2_lbnSelected" href="javascript:__doPostBack('ctl00$ContentPlaceHolder2$lbnSelected','')">Select</a>
<a id="ctl00_ContentPlaceHolder2_lbnPdf" href="javascript:__doPostBack('ctl00$ContentPlaceHolder2$lbnPdf','')">
<em class="txt-underline">Print PDF</em>
</a>
我正在尝试点击下拉菜单中的第二个javascript链接(即带有id="ctl00_ContentPlaceHolder2_lbnPdf"
的那个),但我无法获得任何工作。在上面列出的第二个线程中,其他人似乎表明这需要执行一些JavaScript,但是我无法理解为了成功执行此操作而实际需要运行的JavaScript,或者如何在Python中执行它。
非常感谢任何帮助!
编辑:这是我尝试过的一些代码:
# set up driver
driver = webdriver.Chrome()
... # omitting code here for navigating to the right page, etc.
# each of these returns a NoSuchElementException
driver.find_elements_by_xpath('//*[@id="ctl00_ContentPlaceHolder2_lbnPdf"]')
driver.find_element_by_css_selector('#ctl00_ContentPlaceHolder2_lbnPdf')
driver.find_element_by_link_text('Print PDF Resume')
请注意,我很确定我已导航到正确的页面,因为我能够使用其xpath在我粘贴的块的顶部找到div:
# does not return a NoSuchElementException
driver.find_element_by_xpath('//*[@id="aspnetForm"]/div[2]/div[1]/div')