Найдите элемент с помощью href и нажмите на него.Копирование xpath не работает - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь собрать некоторую информацию с этого сайта , используя селен питона.

Сначала я захожу на сайт и захожу на страницу .Затем я хотел бы нажать на вкладку «Quickscan», чтобы очистить некоторую информацию.Тем не менее, вот где я застрял.Я не могу найти способ нажать на вкладку.

Обратите внимание, что эта проблема будет преодолена, если мне удастся перейти на страницу , хотя при входе в систему, даже если я помещаю такую ​​страницу в мой WebDriver, меня все равно перенаправляют на this .

Чтобы попасть на нужную страницу Я пытался найти элемент как через xpath, так и по ссылке, но он не находит элемент.

import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

driver =webdriver.Chrome(executable_path ="mypath")

driver.get("https://vc4a.com/ventures/autocollect/#quickscan-tab")



#find username and password bar
username = driver.find_element_by_id("user_login")
password = driver.find_element_by_id("user_pass")

#Input password and username
username.send_keys("username")
password.send_keys("password")

#click on submit
driver.find_element_by_name("wp-submit").click()
driver.find_element_by_name("rememberme").click()

#try to find element using text in the link
driver.find_elements_by_link_text('#quickscan-tab')[0].click()

#try to find element using xpath from the inspected element
driver.find_element_by_xpath('//*[@id="subnav"]/li[3]/a').click()

Я хотел бы иметь возможность открыть вкладку, чтобы я мог очистить содержимое.

Когда я использую первый код, он возвращает следующую ошибку:

IndexError: list index out of range

Однако, просматривая страницу, я вижу, что действительно есть 2 элемента с текстом "# quickscan-tab", поэтому я не понимаю, почему индекс 0 выходит за пределы диапазона.

Когда я использую второй код, он возвращает следующую ошибку:

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="subnav"]/li[3]/a"}
  (Session info: chrome=74.0.3729.169)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.5 x86_64)

То, что я делал, просто копировалоxpath.

Ответы [ 3 ]

0 голосов
/ 25 мая 2019

Я создал учетную запись на этой странице и попробовал этот измененный скрипт, и он работает:

import requests
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

driver = webdriver.Chrome()

driver.get("https://vc4a.com/ventures/autocollect/#quickscan-tab")

#find username and password bar
username = driver.find_element_by_id("user_login")
password = driver.find_element_by_id("user_pass")

#Input password and username
username.send_keys("username")
password.send_keys("password")

#click on submit
driver.find_element_by_name("rememberme").click()
driver.find_element_by_name("wp-submit").click()
time.sleep(10)

#try to find element using text in the link
driver.find_elements_by_link_text('Quickscan')[0].click()

#try to find element using xpath from the inspected element
driver.find_element_by_xpath('//a[text()="Quickscan"]').click()
  1. link_text означает текст, который вы на самом деле видите.[Quickscan]
  2. Для входа в систему требуется время, и сценарий пытается найти его перед созданием вкладки, что вызывает ошибку.
  3. Ваш xpath сработал бы, если бы не задержка входа в систему.
  4. Нажмите кнопку запомнить, прежде чем отправить форму.Или нет, поскольку селен запускает чистый сеанс для каждого запуска.
0 голосов
/ 27 мая 2019

Попробуйте это:

scanelements = driver.find_elements_by_xpath('//*[@id='quickscan-tab']')
for elt in scanelements :
   elt.click()
   break
0 голосов
/ 25 мая 2019

driver.find_elements_by_link_text ('# quickscan-tab') [0] .click () - это неправильно

Текст ссылки не работает так, как вам нужно, чтобы создать другой локатор. попробуйте ниже XPath

driver.find_element_by_xpath((//*[@id='quickscan-tab'])[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...