Python - Selenium - webscrape xmlns表

时间:2014-01-21 11:32:12

标签: python xml selenium xpath

<html xmlns="hyyp://www.w3.org/1999/xhtml">
    <head>_</head>
    <body>
        <form name="Main Form" method="post" action="HTMLReport.aspx?ReportName=...">
            <div id="Whole">
                <div id="ReportHolder">
                    <table xmlns:msxsl="urn:schemeas-microsoft-com:xslt" width="100%">
                        <tbody>
                            <tr>
                                <td>_</td>
                                <td>LIVE</td>
                                and the data I need is here between <td> </td>

到目前为止我的代码是:

import time
from selenium import webdriver

chromeOps=webdriver.ChromeOptions()
chromeOps._binary_location = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
chromeOps._arguments = ["--enable-internal-flash"]

browser = webdriver.Chrome("C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe", port=4445, chrome_options=chromeOps)
time.sleep(3)

browser.get('website')
elem=browser.find_element_by_id('MainForm')
el=elem.find_element_by_xpath('//*[@id="ReportHolder"]')

最后两行代码真的是我在测试xpath故障之前的路径。尝试xpath到超出此点的任何内容会产生noSuchElementException。

有人可以向我解释我如何从表格中提取数据吗?

我目前的想法是,也许我必须将“某些东西”传递到xml树api并通过它访问它。虽然我不知道如何抓住它。

如果有人能给我下一步,我会非常感激,感觉有点像我现在在黑暗的房间里举着蜡烛。

1 个答案:

答案 0 :(得分:0)

这很简单。这是一个时间问题。

解决方案:在xpath请求之前放置time.sleep(5)。

browser.get('http://www.mmgt.co.uk/HTMLReport.aspx?ReportName=Fleet%20Day%20Summary%20Report&ReportType=7&CategoryID=4923&Startdate='+strDate+'&email=false')
time.sleep(5)
ex=browser.find_element_by_xpath('//*[@id="ReportHolder"]/table/tbody/tr/td')

xpath正在请求动态内容的引用。

该表是动态内容,加载该内容需要更长的时间,然后它才能使python程序到达行:

ex=browser.find_element_by_xpath('//*[@id="ReportHolder"]/table/tbody/tr')

来自上一行:

browser.get('http://www.mmgt.co.uk/HTMLReport.aspx?ReportName=Fleet%20Day%20Summary%20Report&ReportType=7&CategoryID=4923&Startdate='+strDate+'&email=false')