Selenium 教程第 3 部分

Selenium 教程第 3 部分

我真的很抱歉放弃这部续集。实际上,我在写这篇文章的时候就失去了动力,想着谁会去读它,甚至会喜欢它。但是看到您的一些支持者喜欢这个故事或添加到他们的阅读列表中,我感到内疚并想为此道歉并且也有动力。分享是一件好事,因为我们不知道谁在寻找它!现在,无论如何我都会继续写下去。谢谢大家:)

重要的提示: 我在 2022 年写这篇文章 1 2 写于 2021 年 4 月。所以,在使用硒时,我发现硒有 不推荐使用 find_element_by_ 方法。因此,以前的代码可能不起作用。在这一部分中,我使用的是最新的 selenium 版本,因此将向您展示如何使用新的方法和语法进行抓取。

因此,继续前进,当您在 Twitter 上搜索任何内容并按 Enter 键时,您将位于顶部。

top section

所以,从这里我想去人物部分并选择官方的 BTS 帐户。为此,我们可以使用 xpath 并以 People 形式查找文本并在那里执行单击事件。如前所示,xpath 使用文本在网页上查找元素的语法是 //*[text()='你的文字']. 因此,对于单击 People 部分,xpath 将是 //*[text()='People']。您也可以在检查页面上确认这一点。

在此页面中,您将看到 3 个单词与 People 和第一个总是以圆圈突出显示的元素。好在 查找元素 将给出第一次出现 People 的元素,如果你想要其他两个也可以使用 查找元素 .

单击“人员”部分的新语法是:

我们使用驱动变量,现在 selenium 只有一个功能 查找元素 为所有类型的操作和函数内部用户名,我们通过您要查找的方法和实际的 Web 元素传递,然后像往常一样使用 click() 函数。关键字 经过 来自硒的进口。 By 拥有所有其他功能来定位 Web 元素,如 By.TAG_NAME、By.CLASS_NAME 等(查看官方网站了解更多信息)。使用 sleep 加载页面。

library imports

现在我们在这个页面:

People section for search BTS

现在我们需要选择第一个是BTS的官方账号。要再次执行此操作,请右键单击第一个帐户并选择检查。找到 web 元素或只使用文本所在的 xpath '防弹童子军'。 我发现这非常简单,您正在利用这个词在页面中独一无二。现在只需找到带有此文本的元素并单击它并等待加载页面。

selecting bts official account

单击此按钮后,我们在此页面上:

official account of bts

现在,我们将从这个页面收集官方 bts 推文、点赞数、转推、评论、帐户名称、@... 等。首先,我们需要找到单个帖子。这会很困难,但别担心,我会在你身边 😃 再次右键单击帖子并单击检查。

你会发现这些列表

标签,但是当您将鼠标悬停在每个标签上时,其中一些会突出显示帖子,而有些则不会,这意味着并非所有这些都突出显示单个帖子。所以,要找到:

选择一个

突出显示单个帖子的标签。然后找到我们可以用来定位单个帖子的东西。唯一元素可以是类属性、标签或任何其他标签或属性。让我们找到它。为此,我将选择第一个
标记并扩展它,并通过反复试验在 xpath 中使用不同的属性,这将帮助我突出显示单个帖子。

所以,探索和尝试不同的方法,我发现 **

** 带有属性的标签 数据测试 能够找到个别职位。因此,我们可以使用 xpath 来定位它。此外,我们正在收集多个帖子或推特帖子列表,当我们必须找到多个元素时,我们使用 查找元素。 我希望您能够自己编写语法。

selecting individual posts

请注意,这里我没有使用单击,而是将 Web 元素分配给了一个变量。因为 查找元素 返回给定 xpath 的 Web 元素列表。这里的网络元素列表是各个帖子。现在我们需要找到帐户名、用户名、推文和计数。现在,在 Twitter 上发一篇帖子并进行检查。现在是你的锻炼时间,深入了解

在下图中标记或右键单击并检查帖子并尝试找到所需项目的元素。

无论哪种方式,您都会看到有这两个 div 标签,它分隔 一个 div 标签中的 Twitter 名称和用户名另一个 div 标签上的 twitter 文本和反应元素。

接下来,我们需要深入了解这两个 div 标签。因此,当您展开第一个 div 标签以获取帐户名称和用户名时,您将看到这两个 div 标签, 1 给我们帐户名称和 2 给我们推特用户名。我们可以使用 div 标签来定位它。尽管如此,我们还没有得到帐户名称。要获取帐户名称,展开第一个 div 标签,您会发现文本在 ** ** 标签。

div tags of acc name & acc username

expanding div tag corresponding to acc name

这里涉及到层次结构的知识。这 ** ** 标签位于 div 标签内。因此,要进入任何 div 或任何父标签,我们遵循以下语法:

//parent_tag[]//child_tag1[]//child_tag11[]…

示例:要获取帐户名称,我们可以遵循以下语法:

//div[ @班级 ='css-1dbjc4n r-1awozwy r-18u37iz r-1wbh5a2 r-dnmrzs']//跨度

上面的语法突出显示 div 标签内的第一个 span 标签,但 acc 名称在第二个 span 标签中。但是在这里你可以应用一个技巧而不是技巧,而是硒的一个功能。您可以通过选择唯一的父标签来收集标签内的所有文本并使用 文本 属性。这意味着在这种情况下你不需要去寻找 span 标签。

同样,我们可以只选择 **

** 为 acc 用户名标记并获取文本。对于 twitter 文本也一样,只需导航到相应的 div 标签,然后使用 文本 属性来获取推文。

接下来要找到反应计数,您将找到这三个标签,如果您使用属性 数据测试, 您可以找到各个元素并使用 text 属性来获取数字。

expanding reactions div tag

前三个是对应的 **

** 这三个元素的标签:

要单独定位每一个,您会发现 数据测试 有帮助。扩展并看到自己。

下面是从每个帖子中收集信息并存储在列表中的代码。

现在剩下的最后一部分是自动向下滚动页面。太简单了,你可以参考这个 堆栈溢出 页。

为了给你一些提示,滚动我们使用以下语法:

我们使用一些睡眠时间让页面加载帖子。在里面 堆栈溢出 页面你会发现如何在无限循环中滚动。

在下面的代码中,我滚动直到获得 10 个帖子的信息:

欢呼!我完成了这篇文章,你学会了如何从 twitter 页面上抓取,呵呵……我希望我没有让你感到无聊,也没有因为使用 BTS 帐户而冒犯任何人。我希望你把它当作学习。感谢您阅读它,再次感谢支持我以前的文章并激励我继续写作的人们:)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/12410/21440412

posted @   哈哈哈来了啊啊啊  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示