【问题标题】:Python - Selenium - Cannot Find Element on PagePython - Selenium - 无法在页面上找到元素
【发布时间】:2018-07-03 01:44:02
【问题描述】:

我使用 Selenium 已经有一段时间了,我正在尝试从他们的 LinkedIn 公司页面中提取 LinkedIn 公司 ID。本节中的每个标签都是动态的或不是唯一的。所以我选择了 xpath。

<code style="display: none" id="bpr-guid-3744658">
  {"data":{"elements":["Ts9RZEZq7awx/7fUFM1C+A==,0"],"paging":{"count":10,"start":0,"links":[]}},"included":[{"$deletedFields":[],"width":800,"fileIdentifyingUrlPathSegment":"800_800/0?e=1536192000&amp;v=beta&amp;t=6ny2TVRT-FUOSV45OcAvzB5KWQlEJM0YmuPxexVNx0M","height":800,"$type":"com.linkedin.common.VectorArtifact","$id":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-3"},{"$deletedFields":[],"width":400,"fileIdentifyingUrlPathSegment":"400_400/0?e=1536192000&amp;v=beta&amp;t=-5gPpNm7Ro7cttZe-oKhpFK0cwbm11VMH9uHoptg1Mk","height":400,"$type":"com.linkedin.common.VectorArtifact","$id":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-2"},{"$deletedFields":[],"width":200,"fileIdentifyingUrlPathSegment":"200_200/0?e=1536192000&amp;v=beta&amp;t=4xw5nz_6JCFJpMCvqp3zYgpWu4vkjT88sgc7mmZBMiM","height":200,"$type":"com.linkedin.common.VectorArtifact","$id":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-1"},{"$deletedFields":[],"width":100,"fileIdentifyingUrlPathSegment":"100_100/0?e=1536192000&amp;v=beta&amp;t=FrXLV0ITY8qMu6Qm-C6domrXpRbUWbbhWCZpeWffJfI","height":100,"$type":"com.linkedin.common.VectorArtifact","$id":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-0"},{"$deletedFields":["attribution"],"artifacts":["urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-0","urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-1","urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-2","urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage,artifacts,80a83d1c-6000-4576-ac86-2403150cd7ab-3"],"rootUrl":"https://media.licdn.com/dms/image/C5603AQHWo0jcnWXI7A/profile-displayphoto-shrink_","$type":"com.linkedin.common.VectorImage","$id":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage"},{"profilePicture":{"com.linkedin.common.VectorImage":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo,profilePicture,com.linkedin.common.VectorImage"},"firstName":"Stephanie","lastName":"Goldberger","$deletedFields":[],"entityUrn":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo","$type":"com.linkedin.voyager.identity.normalizedprofile.Profile"},{"inNetworkPeopleSearchUrl":"https://www.linkedin.com/vsearch/p?f_N=F&amp;f_CC=1288","$deletedFields":[],"totalNumberOfConnections":1,"topConnectionsResolutionResults":{"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo":"urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo"},"topConnections":["urn:li:fs_normalized_profile:ACoAAAI8JnMBdj5agxf-k-p3EhA5XpUNvhknDIo"],"$type":"com.linkedin.voyager.jobs.shared.InNetworkRelevanceReasonDetails","$id":"Ts9RZEZq7awx/7fUFM1C+A==,0,details,com.linkedin.voyager.jobs.shared.InNetworkRelevanceReasonDetails"},{"$deletedFields":[],"company":"urn:li:fs_normalized_company:1288","details":{"com.linkedin.voyager.jobs.shared.InNetworkRelevanceReasonDetails":"Ts9RZEZq7awx/7fUFM1C+A==,0,details,com.linkedin.voyager.jobs.shared.InNetworkRelevanceReasonDetails"},"$type":"com.linkedin.voyager.organization.relevance.CompanyRelevanceReason","$id":"Ts9RZEZq7awx/7fUFM1C+A==,0"}]}
</code>

在检查开发工具中,此命令返回预期结果:

e = $x('//*[contains(.,"bpr-guid-3744658")]')

但是,因为 id 是动态的,所以我尝试了这个:

e = $x('//*[contains(.,"bpr-guid-")]')

这会返回结果,但正确的节点不在列表中。我正在寻找的节点之后的节点实际上已进入列表。

我的程序是用 Python 编写的,但我使用的是 JavaScript,因为它的调试速度要快得多(因此非常感谢 Python 中的解决方案)。

Datalet is in list

【问题讨论】:

  • 用更多的 outerHTML 更新问题

标签: javascript python selenium selenium-webdriver


【解决方案1】:

尝试使用starts_with 代替包含,我也建议使用id 代替.,如下所示:

 CompanyList = driver.find_elements_by_xpath('.//code[starts-with(@id, "bpr-guid")]')

如果元素不总是有标签&lt;code或者它们没有start-with @id = bpr-guid,那么我们可以想出另一个更直接的解决方案比您之前尝试缩小元素列表的范围。

【讨论】:

    【解决方案2】:

    //*[starts-with(@id, "bpr-guid")]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多