Как перейти по ссылке с помощью Selenium и Python

Привет, я пытаюсь щелкнуть эту ссылку, используя селен, но она не нажимается

Это HTML с сайта

<td class = " sorting_1" data-key = "title" data-label = "Title"><a class = "document-link" href = "/view/html/inforce/current/act-1984-051?query=((Repealed%3DN+AND+PrintType%3D%22act.reprint%22+AND+PitValid%3D%40pointInTime(20190411000000))+OR+(Repealed%3DN+AND+PrintType%3D%22reprint%22+AND+PitValid%3D%40pointInTime(20190411000000)))+AND+Title%3D(%22Aboriginal+and+Torres+Strait+Islander+Communities+(Justice%2C+Land+and+Other+Matters)+Act+1984%22)&amp;dQuery=Document+Types%3D%22%3Cspan+class%3D'dq-highlight'%3EActs%3C%2Fspan%3E%2C+%3Cspan+class%3D'dq-highlight'%3ESL%3C%2Fspan%3E%22%2C+Search+In%3D%22%3Cspan+class%3D'dq-highlight'%3ETitle%3C%2Fspan%3E%22%2C+Exact+Phrase%3D%22%3Cspan+class%3D'dq-highlight'%3EAboriginal+and+Torres+Strait+Islander+Communities+(Justice%2C+Land+and+Other+Matters)+Act+1984%3C%2Fspan%3E%22%2C+Point+In+Time%3D%22%3Cspan+class%3D'dq-highlight'%3E11%2F04%2F2019%3C%2Fspan%3E%22">Aboriginal and Torres Strait Islander Communities (Justice, Land and Other Matters) Act 1984</a></td>

Это то, что я пытаюсь в своем коде

act_link = browser.find_element_by_xpath("//a[@class='document-link'][@href]").click()

Не могли бы вы проверить код и сообщить мне, что я делаю неправильно? Это полный код.

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
import csv
options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : r'C:\Users\u0119342\Desktop\LEG_DOWNLOAD\Legislation@Koru\WORD\missing'}
options.add_experimental_option('prefs', prefs)
browser = webdriver.Chrome(executable_path=r'D:\CHROME\chromedriver.exe', chrome_options=options)
browser.get('https://www.legislation.qld.gov.au/')
for parameter in ['Aboriginal and Torres Strait Islander Communities (Justice, Land and Other Matters) Act 1984']:
    search_button = browser.find_element_by_xpath("//li/a[@href='/search/inforce']")
    search_button.click()
    search_field = browser.find_element_by_xpath("//div[@class='col-sm-8']/input[@type='text'][@class='form-control ui-autocomplete-input']")
    search_field.send_keys(parameter)
    search_in = browser.find_element_by_xpath("//select[@name='searchin']/option[@value='Title']")
    search_in.click()
    search_using = browser.find_element_by_xpath("//select[@name='searchusing']/option[@value='exactwords']")
    search_using.click()
    search_button1 = browser.find_element_by_xpath("//div [@class='col-sm-offset-2 col-sm-10']/button[@class='btn btn-primary btn-form']")
    search_button1.click()
    try:
        act_link = browser.find_element_by_xpath("//a[@class='document-link'][@href]").click()
    except NoSuchElementException:
        try:
            leg_his = browser.find_element_by_xpath("//a[@class='btn btn-default']/span[@id='glyphicon glyphicon-calendar']/span[@id='view-lh']")
            leg_his.click()
        except NoSuchElementException:
            try:    
                act_text = browser.find_element_by_xpath("//div[@id='lhview']/div[@class='content']")
                with open('output.rtf', 'w') as f:
                    f.write(act_text.text)
            except NoSuchElementException:
                time.sleep(10)
browser.back()
time.sleep(10)
browser.quit()

Я ожидаю, что ссылка тега href будет нажата и перейдет на следующую страницу.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
222
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Удалите [@href] из своего Xpath, вам нужен Xpath к веб-элементу, а не к атрибуту веб-элемента.

Привет, Стефан, попробовал то, что ты посоветовал, но все равно не нажимаешь на ссылку.

Joe 10.04.2019 23:23
Ответ принят как подходящий

Чтобы click() на элементе с текстом как Закон 1984 года об общинах аборигенов и жителей островов Торресова пролива (правосудие, земельные и другие вопросы) вам нужно вызвать WebDriverWait для элемент, который будет кликабельным, и вы можете использовать любой из следующих Стратегии поиска:

  • Использование LINK_TEXT:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Aboriginal and Torres Strait Islander Communities (Justice, Land and Other Matters) Act 1984"))).click()
    
  • Использование PARTIAL_LINK_TEXT:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Aboriginal and Torres Strait Islander Communities (Justice, Land and Other Matters) Act 1984"))).click()
    
  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.sorting_1[data-key='title'][data-label='Title']>a.document-link[href^='/view/html/inforce/current/act-1984-051']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class=' sorting_1' and @data-key='title'][@data-label='Title']/a[@class='document-link' and starts-with(@href, '/view/html/inforce/current/act-1984-051')]"))).click()
    
  • Примечание: Вы должны добавить следующие импорты:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Другие вопросы по теме

Сохранение файлов cookie в файл и повторное использование в веб-драйвере selenium python -- объект списка кодирования
Невозможно поместить данные в элемент таблицы. Всплывающее окно с ошибкой «Нет такого элемента найдено»
Как получить содержимое таблицы с веб-страницы с помощью javascript с помощью python?
WebDriver для закрытия всплывающего окна через определенное время
Selenium WebDriver: есть ли способ подсчета элементов в динамическом списке, где элементы имеют гиперссылки?
Как загружать файлы с помощью GeckoDriver Firefox и Selenium?
Как извлечь текст внутри элемента с помощью Selenium WebDriver и Python?
Как автоматизировать функцию OTP для входа в систему продаж с помощью selenium WebDriver?
Org.openqa.selenium.InvalidSelectorException: недопустимый селектор SyntaxError: неожиданный токен} с использованием XPath через Selenium Java
Как поддерживать репозиторий объектов для селена вместо того, чтобы писать его снова и снова?

Похожие вопросы