【问题标题】:Select Link in Table Rows using Selenium for Python使用 Selenium for Python 在表行中选择链接
【发布时间】:2019-05-03 13:50:15
【问题描述】:

我希望在 Python 中单击使用 Selenium 的链接。该链接包含在具有动态行数的表中,我想根据最近的日期选择“已创建工作”的链接。棘手的部分是链接不是日期本身,而是行上的单独列。

表格格式如下:

我可以做的一个可能的解决方案是: button = find_elements_by_link_text("Job Created"),然后指定 button[0].click() ,但我希望有办法选择 Job Status基于创建时间的链接。

表格示例代码:

                <tr>
                <!--td>1</td>
                <td></td-->
                <td>2018/12/1 16:12:33 UTC</td>
                <td><a target="_blank" href="/sample/sample">Job Created</a></td>

谢谢!

【问题讨论】:

  • 你能分享更多的html吗?
  • 看起来你可以使用类似 //a[text()="Job Created"]/preceding::td 的东西,并使用索引来确定哪个 a 然后定位。 stackoverflow.com/questions/9857756/…
  • @shong555 ...根据创建时间选择Job Status链接... 创建时间是每秒粒度的,你怎么知道具体是哪个@987654325 @你需要交互/点击的相关元素?

标签: python html selenium google-chrome web-scraping


【解决方案1】:

在没有更多 HTML 和/或 URL 的情况下,我希望从可能的逻辑角度来看,以下内容会有所帮助。我选择了一个网站,其中的表格有一个价格列(这是日期时间的替代品)和一个包含要匹配的文本的列。希望我的尝试不会受到太严厉的评判。

我概述了我认为与您的问题相似的步骤,即

  1. 使用 xpath 选择两个列表,其中一个列表是 a 与文本匹配的标记元素,另一个是 preceding::td[1] 。在您的示例中,我认为可能的 xpath 是:

//a[text()="Job Created"]/preceding::td 
//a[text()="Job Created"]
  1. 您从第一个列表中获取文本并根据需要进行处理。您需要一个函数来格式化您的日期时间以便进行排序。第二个列表作为元素保存,以便以后可以单击。这假设您的日期时间可以以可接受的方式处理和排序。

  2. 将这些组合到一个元组列表中,然后对每个元组中的第一个进行排序

所以,我公认的不完美案例研究的大纲:

from selenium import webdriver
from operator import itemgetter

url ="https://www.wiseowl.co.uk/dax/london/"
driver = webdriver.Chrome()
driver.get(url)

#used title myDates although in my example I am using prices
myDates =[int(element.text.strip('£')) for element in driver.find_elements_by_xpath("//a[text() = 'Book places']/preceding::td[1]")]
myData = [element for element in driver.find_elements_by_xpath("//a[text() = 'Book places']")] #links in adjacent column

combined = list(zip(myDates,myData))
combined = sorted(combined,key=itemgetter(0), reverse=True) #sort list on first 'column'
combined[0][1].click()  #click first in descending list

#other code
# driver.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2018-08-06
    • 2016-07-24
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    相关资源
    最近更新 更多