Javascript 是否有方法为赢得';刷新或DOM位置更改时,是否获取无效元素?

Javascript 是否有方法为赢得';刷新或DOM位置更改时,是否获取无效元素?,javascript,css,web-scraping,css-selectors,puppeteer,Javascript,Css,Web Scraping,Css Selectors,Puppeteer,我正在使用Puppeter抓取这个网站的用户资料。我有一个个人资料链接列表,我可以使用这些链接进入每个个人资料页面,获取每个用户的twitter链接、youtube链接和其他信息 示例配置文件 -有youtube、twitter、网站,但没有位置 -有twitter、网站但没有位置,但没有youtube 这是我用来为twitter、youtube和网站链接生成唯一选择器的配置文件 我使用ChromeDevTools获得唯一的选择器,youtube的选择器如下所示 但在我共享的另一个配置文件

我正在使用Puppeter抓取这个网站的用户资料。我有一个个人资料链接列表,我可以使用这些链接进入每个个人资料页面,获取每个用户的twitter链接、youtube链接和其他信息

示例配置文件

  • -有youtube、twitter、网站,但没有位置
  • -有twitter、网站但没有位置,但没有youtube
这是我用来为twitter、youtube和网站链接生成唯一选择器的配置文件

我使用ChromeDevTools获得唯一的选择器,youtube的选择器如下所示

但在我共享的另一个配置文件中,没有youtube链接,它获取twitter链接,但如果没有youtube链接,我希望它为空

并非所有用户都有youtube链接或twitter链接等,因此这些独特的选择器在不同的配置文件中获取错误的数据

我知道选择器只是通过获取第四个项目来完成他们的工作(因为选择器是
a:nth child(4)
),但是我如何才能获取只返回那种数据的唯一选择器,例如youtube选择器获取youtube链接,如果没有链接,则它将不返回任何内容,因此返回一个


还要记住,链接可以是随机的,比如网站链接,每个用户都有一个不同的网站链接,因此您无法将href或innerText与预定义的关键字匹配。

如果外部链接列表有限,您可以通过向
查询选择器提供外部网站URL的一部分来检查它们是否存在:

document.querySelector('.tv-profile__title-info-item[href^="https://www.youtube.com"]')

对于位置,标记图标所在的前面的
元素有一个非常独特的类
tv-profile\uuu title-info-icon--place
,因此您可以使用textnode获取该位置

const loc = document.querySelector('.tv-profile__title-info-icon--place').nextSibling.textContent;
对于锚元素,您知道它们的
href
属性不同(这就是为什么您希望它正确?),因此您可以将其用作选择器。比如说

  • twitter链接:
    a[href*=”://twitter.com/“]
  • youtube链接:
    a[href*=”:///www.youtube.com/“]
其中一个不匹配的链接是个人网站链接:

a.tv-profile__title-info-item:not([href*="://twitter.com"]):not([href*="://www.youtube.com"])

哦,好主意,好弗拉德