【问题标题】:Selecting specific table cells in Selenium web driver (Python)在 Selenium Web 驱动程序 (Python) 中选择特定的表格单元格
【发布时间】:2015-09-10 05:27:52
【问题描述】:

我正在尝试从结构如下的页面的链接中提取信息:

...

<td align="left" bgcolor="#FFFFFF">$725,000</td>

<td align="left" bgcolor="#FFFFFF"> Available</td>

*<td align="left" bgcolor="#FFFFFF">
    <a href="/washington">


 Washington Street Studios
<br>1410 Washington Street SW<br>Albany, Oregon, 97321
</a>
</td>*

<td align="center" bgcolor="#FFFFFF">15</td>

<td align="center" bgcolor="#FFFFFF">8.49%</td>

<td align="center" bgcolor="#FFFFFF">$48,333</td>

</tr>

我尝试使用属性“align = left”定位元素并对其进行迭代,但没有成功。如果有人能帮我找到带有 selenium 的元素 &lt;a href = "/washington"&gt;(在同一页面中有多个类似的标签),我将不胜感激。

【问题讨论】:

  • 您能否发布更多tr 行,以便我们清楚地了解所需链接的位置?谢谢。

标签: python selenium selenium-webdriver


【解决方案1】:

如果只是为了处理 hxml,我会使用 lxml...

如果您更具体一些会有所帮助,但如果您正在遍历网页中的链接,则可以尝试这样做..

from lxml.html import parse

pdoc = parse(url_of_webpage)
doc = pdoc.getroot()
list_of_links = [i[2] for i in  doc.iterlinks()]

list_of_links 看起来像 ['/en/images/logo_com.gif', 'http://www.brand.com/', '/en/images/logo.gif']

doc.iterlinks() 将查找所有链接,例如 form、img、a-tags 和包含包含标签的 Element 对象、标签类型(form、a 或 img)、url 和数字的产量列表,所以这条线

list_of_links = [i[2] for i in doc.iterlinks()]
只需获取 url 并作为单独的列表返回。

请注意,检索到的 url 是 relative。正如你会看到像

这样的网址
'/en/images/logo_com.gif'

而不是

'http://somedomain.com/en/images/logo_com.gif'

如果你想要后一种url,添加代码

from lxml.html import parse
pdoc = parse(url_of_webpage)
doc = pdoc.getroot()
doc.make_links_absolute()     #  add this line
list_of_links = [i[2] for i in  doc.iterlinks()]

如果你是逐个处理url,那么只需将代码修改为类似

for i in iterlinks():
    url = i[2]
    # some processing here with url...

最后,如果由于某种原因需要 selenium 进来获取网页内容,那么只需在开头添加以下内容

from selenium import webdriver
from StringIO import StringIO

browser = webdriver.Firefox()
browser.get(url)
doc = parse(StringIO(browser.page_source)).getroot()

【讨论】:

    【解决方案2】:

    根据我们目前提供的信息,有一个table,并且您在特定列中有所需的链接。没有“面向数据”的属性可以依赖,但使用列索引来定位链接看起来就足够了:

    for row in driver.find_elements_by_css_selector("table#myid tr"):
        cells = row.find_elements_by_tag_name("td")
    
        print(cells[2].text)  # put a correct index here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多