【问题标题】:Python Selenium find_element_by_xpath can't find elementsPython Selenium find_element_by_xpath 找不到元素
【发布时间】:2020-11-06 19:33:13
【问题描述】:

Python 和 Selenium 的新手。尝试获取与 xpath 或 css_selector 匹配的元素列表并提取链接文本。搜索并尝试了许多变体,但我尝试过的所有内容都返回一个空列表。显然没有使用正确的 xpath 或 css_selector 值。

试图找到这个元素...

<a class="tablelink" onclick="this.blur(); return true;" href="viewoffender.do?method=view&offenderID=0673237&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&listurl=pagelistoffendersearchresults&listpage=1">0673237</a>

这些都试过了……

elements = driver.find_elements_by_css_selector('a[href="viewoffender.do"]')
elements = driver.find_elements_by_css_selector("[href='%viewoffender.do']")
elements = driver.find_elements_by_xpath('//a[contains(@href, "viewoffender.do")]')
elements = driver.find_elements_by_xpath("/html/body/div/div[6]/div/table[2]/tbody/tr[3]/td[1]/a")
elements = driver.find_elements_by_css_selector(".tableRowEven > td:nth-child(1) > a:nth-child(1)")
elements = driver.find_elements_by_xpath("//*[starts-with(@id, 'link-viewoffender.do')]")

这里是 HTML 页面...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">




<html>


<head>
<noscript>
<meta http-equiv="refresh" content="1; url=javascriptdisabled.html">
</noscript>
</head>
<body>
<base href="https://webapps.doc.state.nc.us/opi/">
<title>NC DPS Offender Public Information</title>
<script type="text/javascript" src="scripts/DHTMLmessages.js"></script>
<!--<script type="text/javascript" src="scripts/contextmenu.js"></script>-->
<script type="text/javascript">
<!-- 
if (screen.width < 1024) {
if (document.all) {
document.write('<link rel="stylesheet" type="text/css" href="styles/opi800IE.css">');
}
else if (document.getElementById) {
document.write('<link rel="stylesheet" type="text/css" href="styles/opi800.css">');
}
}
else {
if (document.all) {
document.write('<link rel="stylesheet" type="text/css" href="styles/opi1024IE.css">');
}
else if (document.getElementById) {
document.write('<link rel="stylesheet" type="text/css" href="styles/opi1024.css">');
}
}

function showCalendar(dateField) {
if (document.all) {
window.dateField = dateField;
var windowArguments = new Object();
windowArguments.dateField = dateField;  
var sFeatures = "dialogHeight:330px; dialogWidth:250px; help:off; unadorned:yes; status:no; ";
var answer = window.showModalDialog('/opi/calendar.html',windowArguments,sFeatures);
if (typeof(answer) != "undefined") {
dateField.value = answer;
}
}
else if (document.getElementById) {
returnDate(dateField,null);
window.open('/opi/calendar.html','Calendar - Choose a Date','toolbar=0,location=0,status=0,menubar=0,scrollbars=0,resizable=0,width=250px,height=330px');
}
}

var mydate;

function returnDate(dateField, newdate) {
if (dateField != null) {
mydate = dateField;
}
if (newdate != null && mydate != null) {
mydate.value = newdate;
}
}

function displayReport(url) {
if (document.all) {
document.all("reportframe").src = "report.html?url=" + url + "?method=runreport";
}
else if (document.getElementById) {
document.getElementById("reportframe").src = "report.html?url=" + url + "?method=runreport";
}
}
// -->
</script>
<div id="mainpage">

<div id="banner">
<div id="centercontent"><center><br>North Carolina Department Of Public Safety<br>Offender Public Information</center></div>
</div>
<div id="box">
<div id="tabs">
<ul>
<li><a href="offendersearch.do?method=view"><span>Offender Search</span></a></li>
<li><a href="offenderescapesearch.do?method=view"><span>Escapes/Captures</span></a></li>
<li><a href="offenderabscondsearch.do?method=view"><span>Absconders</span></a></li>
<li><a href="offenderreleasesearch.do?method=view"><span>Inmate Releases</span></a></li>
<li><a href="downloads.do?method=view"><span>Downloads</span></a></li>
</ul>
</div>
</div>

<div class="seal">&nbsp;</div>


<div class="help"><a href="help.do"><img src="images/find.ico" border="0" alt="Got Questions?"></a></div>


<script type="text/javascript" src="scripts/dragiframe.js"></script>
<div class="titlediv"><center>Offender Search Results</center></div>
<div class="maindiv"><br>
<div class="resultspanel">
<table width="100%" cellspacing="2" cellpadding="5" class="displaytable">
<tr align="center">
<td align="center">
<a href="offendersearch.do?method=review&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0" class="actionbutton">Modify Search</a>
<a href="offendersearch.do?method=view" class="actionbutton">New Search</a>
</td>
</tr>
</table>
<table  class="resultstable" width="100%" border="0" cellspacing="1" cellpadding="0">
<tr><td width="100%" colspan="9"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr class="tableRowAction"><td align="left" valign="bottom" class="tableCellAction">2 offenders found, displaying 1 to 2</td>
<td valign="bottom" align="right" class="tableCellAction">
<b>1</b></td>
</tr></table></td></tr>
<tr class="tableRowHeader"><th valign="bottom" width="5%" align="center" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=0" class="tableCellHeader">Offender Number</th>
<th valign="bottom" width="10%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=1" class="tableCellHeader"><br>Last Name</th>
<th valign="bottom" width="5%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=2" class="tableCellHeader"><br>Name<br>Suffix</th>
<th valign="bottom" width="10%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=3" class="tableCellHeader"><br>First Name</th>
<th valign="bottom" width="5%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=4" class="tableCellHeader">Middle Name</th>
<th valign="bottom" width="8%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=5" class="tableCellHeader"><br>Gender</th>
<th valign="bottom" width="8%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=6" class="tableCellHeader"><br>Race</th>
<th valign="bottom" width="5%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=7" class="tableCellHeader"><br>Birth Date</th>
<th valign="bottom" width="5%" align="left" class="tableCellHeader"><a href="pagelistoffendersearchresults.do?method=list&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&order=asc&sort=8" class="tableCellHeader"><br>Age</th>
</tr>
<tr class="tableRowOdd">
<td  class="tablelink" width="5%" align="center" nowrap valign="top"><a class="tablelink" onclick="this.blur(); return true;" href="viewoffender.do?method=view&offenderID=0673237&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&listurl=pagelistoffendersearchresults&listpage=1">0673237</a></td>
<td  class="tableCell" width="10%" align="left" nowrap valign="top">FOSTER              </td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">   </td>
<td  class="tableCell" width="10%" align="left" nowrap valign="top">BEVAN      </td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top"> </td>
<td  class="tableCell" width="8%" align="left" nowrap valign="top">MALE</td>
<td  class="tableCell" width="8%" align="left" nowrap valign="top">BLACK</td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">05/02/1977</td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">43         </td>
</tr>
<tr class="tableRowEven">
<td  class="tablelink" width="5%" align="center" nowrap valign="top"><a class="tablelink" onclick="this.blur(); return true;" href="viewoffender.do?method=view&offenderID=0673237&searchLastName=FOSTER&searchFirstName=BEVAN&searchDOBRange=0&listurl=pagelistoffendersearchresults&listpage=1">0673237</a></td>
<td  class="tableCell" width="10%" align="left" nowrap valign="top">FOSTER              </td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">   </td>
<td  class="tableCell" width="10%" align="left" nowrap valign="top">BEVAN      </td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">J</td>
<td  class="tableCell" width="8%" align="left" nowrap valign="top">MALE</td>
<td  class="tableCell" width="8%" align="left" nowrap valign="top">BLACK</td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">05/02/1977</td>
<td  class="tableCell" width="5%" align="left" nowrap valign="top">43         </td>
</tr>
</table>

</div>
</div>
<div class="bottomdiv">
<table align="center" cellpadding="0" cellspacing="1">
<tr>
<td colspan="2">&nbsp;
</td>
</tr>
<tr>
<td align="left" valign="top" width="24%">
<a href="http://www.nc.gov"><img src="images/logo_ncgov_110x37.gif" alt="North Carolina - A better place to be, www.nc.gov" width="112" height="40" border="0"></a></td>
<td valign="top" align="left" width="76%">
<span style="white-space:nowrap">
<a class="footerlink" href="privacy.do">Privacy Policy</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a class="footerlink" href="disclaimer.do">Disclaimer</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a class="footerlink" href="contact.do">Contact Us</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a class="footerlink" href="help.do">Help Using This Site</a>
</span>             
<span class="copyright" style="font-weight: bold; font-size: 12px;"><br>&copy 2012 North Carolina Department Of Public Safety. All rights reserved.</span>
</td>
</tr>
</table>


</div>
</div>

</body>
</html>

【问题讨论】:

  • 请编辑问题并添加相关的 HTML。虽然外部链接现在可能有用,但如果它在未来失效,这个问题实际上是没有用的。此外,您的共享链接需要我们请求访问权限,因此此时它真的没有用。

标签: python selenium


【解决方案1】:

识别元素使用以下任意CSS selector

elements = driver.find_elements_by_css_selector('a[href^="viewoffender.do"]')

elements = driver.find_elements_by_css_selector('table.resultstable td.tablelink>a.tablelink')

elements = driver.find_elements_by_css_selector('td.tablelink>a.tablelink')

一旦你得到清单。你需要迭代。

for element in elements:
  print(element.text)

【讨论】:

  • 看来我需要等待。在寻找元素之前添加了这个,所有建议都有效。 driver.implicitly_wait(10) 感谢大家的输入
  • 我最终改用了这段代码,没有任何问题... element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, "tableRowHeader")))
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 2021-12-17
  • 2018-11-07
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多