Селен не выполняет действие клика - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь очистить таблицу с несколькими страницами. Следующую страницу можно получить, нажав кнопку «Следующая страница» (см. Фрагмент кода).

<a class="botons" id="btn2" href="javascript:void(0)">
 Next Page  
 <i class="fas fa-long-arrow-alt-right"></i>
</a>

Selenium находит «кнопку» и без проблем «нажимает» по следующему коду:

btn_next = self.browser.find_element_by_partial_link_text("Next Page")
btn_next.click()

Однако страница просто обновляется, и таблица не обновляется до следующей страницы.

Есть какие-нибудь подсказки, что здесь происходит не так?

Редактировать: таблицу можно найти по адресу https://www.proxy -list.download / HTTPS

Edit2:

chrome_options = Options()
chrome_options.add_argument("--enable-javascript")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")

chrome_options.add_argument ( "- без головы")

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Этой кнопке btn2 присвоен один идентификатор , и он тоже уникален.

Вы должны отдать предпочтение идентификатор над ссылка Текст .

Тем не менее, Ссылка на следующую страницу отсутствует в точке обзора . Для этого сначала вам нужно переместить фокус драйвера следующим образом:

wait = WebDriverWait(self.browser,10)
next_page = wait.until(EC.visibility_of_element_located((By.ID, "btn2")))
ActionChains(self.browser).move_to_element(next_page).perform()
next_page.click()  

Импорт:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
0 голосов
/ 11 июля 2019

Требуемый элемент является JavaScript включенным элементом, поэтому для определения местоположения и click() на элементе вы должны вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующий Locator Strategies :

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.botons[id^='btn2'] i.fas.fa-long-arrow-alt-right"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='botons' and normalize-space()='Next Page']/i[@class='fas fa-long-arrow-alt-right']"))).click()
    
  • Примечание : Вы должны добавить следующий импорт:

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