Python - Selenium - не удается найти элемент на странице - PullRequest
0 голосов
/ 03 июля 2018

Я уже некоторое время пользуюсь Selenium и пытаюсь извлечь идентификаторы компании LinkedIn со страницы компании в LinkedIn. Каждый тег в этом разделе является динамическим или не уникальным. Итак, я пошел за 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>

В инструментах проверки inspect эта команда возвращает ожидаемые результаты:

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

Однако, поскольку идентификатор является динамическим, я попробовал это вместо:

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

Возвращает результаты, но правый узел отсутствует в списке. Узел после того, который я ищу, попал в список.

Моя программа на Python, но я использую JavaScript, так как он намного быстрее отлаживается (поэтому решения на Python вместо этого очень ценятся).

Данные в списке

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

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

0 голосов
/ 03 июля 2018

Попробуйте использовать starts_with вместо содержимого, я бы также рекомендовал использовать id вместо ., например:

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

Если элементы не всегда имеют тег <code или не имеют start-with @id = bpr-guid , то мы можем предложить другое более прямое решение, чем то, что раньше вы пытались сузить список элементов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...