简体   繁体   中英

Python Selenium find_element_by_xpath can't find elements

New to Python and Selenium. Trying to get list of elements that match a xpath or css_selector and extract link text. Searched and tried many variations but everything I've tried returns an empty list. Apparently not using the correct xpath or css_selector values.

Trying to find this element...

 <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>

Have tried all of these...

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')]")

Here is HTML page...

 <!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>

To identify the element Use any of the following CSS selector .

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

OR

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

OR

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

Once you get the list. you need to iterate.

for element in elements:
  print(element.text)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM