【问题标题】:How to access the details (i.e sub fields) of second/third elements that has the same class name in selenium using python?如何使用 python 访问 selenium 中具有相同类名的第二个/第三个元素的详细信息(即子字段)?
【发布时间】:2019-11-07 19:36:21
【问题描述】:

我有 3 个具有特定实例的元素(例如:在网站中每个 <div direction="vertical" class="sc-1fp9csv-0 iFnncD"> 下有 3 个 <div class="sc-1xo2hia-0 TegxE">https://www.blockchain.com/btc/block/00000000000000000004b91bad9ecfa8c0e57c256d0007cca6f0a2a9e54a2ccc;在第一个事务上单击“检查元素”以查看特定的 DOM 树)

现在我想从第一个标签 (sc-1xo2hia-0 TegxE) 的第二个和第三个实例中访问一些元素

如何有效地做到这一点?

PS:这段代码:

from selenium import webdriver driver=webdriver.Firefox() driver.get('https://www.blockchain.com/btc/block/00000000000000000004b91bad9ecfa8c0e57c256d0007cca6f0a2a9e54a2ccc') Txn_elements=driver.find_elements_by_xpath('//div[@class="sc-1fp9csv-0 iFnncD"]') length=len(Txn_elements) for i in range(0,length): element=Txn_elements[i] data=element.find_elements_by_xpath(".//div[@class='sc-1xo2hia-0 TegxE'][1]") print data[0].text

仍然只打印第 0 个 <div class="sc-1xo2hia-0 TegxE"> 的详细信息 即它仍然打印:

Hash fc1630ec40d95da3fcca40d499c4be616ea6591dda6f0d3d85a678d47c91ae62 2019-11-06 8:37 PM

应该在哪里打印:

17A16QmavnUfCW11DAApiJxp7ARnxN5pGX 2.62352930 BTC

【问题讨论】:

标签: selenium xpath webdriver screen-scraping


【解决方案1】:
xpath= (.//div[@class='ge5wha-0 bLrlXr']/a)[1] //to get 17A16QmavnUfCW11DAApiJxp7ARnxN5pGX
xpath = (.//div[@class='ge5wha-1 bWdiuU']/span)[1] //to get 2.62352930 BTC

试试这个xpath

【讨论】:

    【解决方案2】:

    请检查下面的解决方案它的工作原理,但如果您只想在 //div[@class="sc-1fp9csv-0 iFnncD"] 中打印两个元素,我不确定您为什么要使用 for 循环

    如果你只想打印一个然后删除 for 循环并尝试执行你的代码

    driver.get('https://www.blockchain.com/btc/block/00000000000000000004b91bad9ecfa8c0e57c256d0007cca6f0a2a9e54a2ccc')
    Txn_elements=driver.find_elements_by_xpath('//div[@class="sc-1fp9csv-0 iFnncD"]')
    length=len(Txn_elements)
    for i in range(0,length):
        element=Txn_elements[i]
        data=element.find_elements_by_xpath("//body/div[@id='__next']/div[@class='sc-1myx216-0 iygrgv']/div[@class='p5q4id-0 fasJHc sc-5vnaz6-1 doVOgS']/div[@class='fieq4h-0 klQmUt']/div[@class='xoxfsb-0 bmukdK']/div[3]/div[2]/div[1]/div[2]/div[1]/div[1]/div[1]/a[1]")
        print data[0].text
    
        data1 = element.find_elements_by_xpath(
            " //body/div[@id='__next']/div[@class='sc-1myx216-0 iygrgv']/div[@class='p5q4id-0 fasJHc sc-5vnaz6-1 doVOgS']/div[@class='fieq4h-0 klQmUt']/div[@class='xoxfsb-0 bmukdK']/div[3]/div[2]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/span")
        print data1[0].text
    

    尝试下面的交易 ID 解决方案

    driver.get('https://www.blockchain.com/btc/block/00000000000000000004b91bad9ecfa8c0e57c256d0007cca6f0a2a9e54a2ccc')
    
    
    List1 = driver.find_elements_by_xpath("//body/div[@id='__next']/div[@class='sc-1myx216-0 iygrgv']/div[@class='p5q4id-0 fasJHc sc-5vnaz6-1 doVOgS']/div[@class='fieq4h-0 klQmUt']/div[@class='xoxfsb-0 bmukdK']/div[*]/div[2]/div[1]/div[2]/div/div/div/a")
    for items in List1:
        print (items.text)
    
    List2 = driver.find_elements_by_xpath("//body/div[@id='__next']/div[@class='sc-1myx216-0 iygrgv']/div[@class='p5q4id-0 fasJHc sc-5vnaz6-1 doVOgS']/div[@class='fieq4h-0 klQmUt']/div[@class='xoxfsb-0 bmukdK']/div[*]/div[2]/div[1]/div[2]/div/div/div/div/span")
    for items in List2:
        print (items.text)
    

    【讨论】:

    • 其实我想从一个页面打印所有的交易细节,所以我需要一个循环结构。我主要想要一种在使用 find_elements 方法时访问后面元素的方法。请参阅我在代码中完成的索引。最后一行。它没有按预期工作。你能帮忙吗?
    • 试试上面的解决方案
    猜你喜欢
    • 2022-01-04
    • 2019-11-26
    • 2014-07-12
    • 2019-06-18
    • 2022-10-31
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多