【问题标题】:Want to crawl a post using Selenium?想要使用 Selenium 抓取帖子?
【发布时间】:2019-09-09 11:17:51
【问题描述】:

点击列表页面上的链接(随机) 看到内容3秒后 我想重复另一个随机点击。

查看一个帖子的内容,不是收藏目的,返回列表查看另一个帖子的内容...

这是一项重复性的任务。

下面的代码有效,但我似乎无法随意点击列表

from time import sleep
from selenium import webdriver


driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('/test')

list_of_links = driver.find_elements_by_xpath('//a[@class="re_href"]')

list_of_linktext = []

for link in list_of_links:
    list_of_linktext.append(link.text)


for linktext in list_of_linktext:
    element = driver.find_element_by_link_text(linktext)
    driver.execute_script("arguments[0].click();", element)
    sleep(3)
    driver.back()
    sleep(3)

html

<table>
    <tbody>
        <tr>
            <td class="num">512</td>
            <td class="thumb"><img src="test.jpg"></td>
            <td class="subject">
                <a href="/article/band/13538" id="re_href" class="re_href">Title</a>
            </td>
            <td class="writer"></td>
            <td class="check"></td>
        </tr>
        <tr>
            <td class="num">512</td>
            <td class="thumb"><img src="test2.jpg"></td>
            <td class="subject">
                <a href="/article/band/14230" id="re_href" class="re_href">Title</a>
            </td>
            <td class="writer"></td>
            <td class="check"></td>
        </tr>
.
.
.
    </tbody>
</table>

【问题讨论】:

  • 它没有点击,因为我认为这个选择器:element = driver.find_element_by_link_text(linktext) 依赖于多个元素。
  • @SelçukAyhan 谢谢你。但我不太明白。
  • 如果有两个元素的链接文本Title 这个代码是行不通的。
  • @SelçukAyhan 所以这段代码只是一个有效的链接。你能让多个链接工作吗?甚至是一个提示......
  • @soria :随机点击是什么意思?您要一个一个地点击每个链接吗?

标签: python selenium web-crawler


【解决方案1】:

试试下面的代码,它会点击每个链接。

driver.get('/test')

list_of_links = driver.find_elements_by_xpath('//a[@class="re_href"]')

for linktext in range(len(list_of_links)):
    list_of_links = driver.find_elements_by_xpath('//a[@class="re_href"]')

    element =list_of_links[linktext]
    driver.execute_script("arguments[0].click();", element)
    sleep(3)
    driver.back()
    sleep(3)

已编辑:

对表格内的所有链接使用下面的 xpath。

driver.get('/testl')

list_of_links = driver.find_elements_by_xpath("//table//tr//td[@class='subject']/a")

for linktext in range(len(list_of_links)):
    list_of_links = driver.find_elements_by_xpath("//table//tr//td[@class='subject']/a")

    element =list_of_links[linktext]
    driver.execute_script("arguments[0].click();", element)
    sleep(3)
    driver.back()
    sleep(3)

【讨论】:

  • 非常感谢。我注意到它们是按顺序点击的。再次感谢。
  • 我再问你一个问题。你能继续整个过程吗?
  • @soria : Can you continue the whole process 没有收到您的问题?
  • 您发布的 html 有 class="re_href" 对。如果您有其他类名链接,您也需要发布。
  • 你可以在 xpath 下使用什么://table//tr//td[@class='subject']/a
猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多