Не могу нажать на элемент - PullRequest
0 голосов
/ 08 июня 2019

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

Я пробовал несколько различных потенциальных решений stackOverflow дляпоследние несколько дней и я все еще в тупике.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
# from selenium.webdriver.common import move_to_element
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction

import time
import sys

browser = webdriver.Chrome('C:/chromedriver.exe')
browser.get('https://connect.werally.com/county-plan-selection/uhc.mnr/zip')


elem_ZipInput = browser.find_element_by_xpath('//*[@id="location"]')
elem_ZipInput.click()
elem_ZipInput.send_keys('80210')
elem_ZipInput.send_keys(Keys.ENTER)
time.sleep(2)

browser.find_element_by_xpath("//button[@track='No Preference']").click()
time.sleep(3)

browser.find_element_by_xpath("//button[@data-test-id='People']").click()
time.sleep(2)

try:
    browser.find_element_by_xpath("//button[@data-test-id='Primary Care']").click()
except:
    browser.find_element_by_xpath("//button[@data-test-id='PrimaryCare']").click()
time.sleep(2)

try:
    browser.find_element_by_xpath("//button[@data-test-id='All Primary Care Physicians']").click()
except:
    browser.find_element_by_xpath("//button[@data-test-id='AllPrimaryCarePhysicians']").click()
time.sleep(2)

elem_PCPList_NextPage = browser.find_element_by_xpath("//i[@class='icon icon_arrow_right']")


ProviderPageTab_Overview = browser.find_element_by_xpath("//*[@id='provider.bioTab']")
ProviderPageTab_Overview.click()
time.sleep(2)


# WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//compare-providers[@class='navigationHeader visible-phone']/div/div/button[@track='next-page']/icon/i"))).click()
# WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div[id='mainContent'] div div header compare-providers[class='navigationHeader visible-phone'] div div button[track='next-page']"))).click()
# WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div[id='mainContent'] div div header div[class='navigationHeader hidden-phone'] div div button[track='next-page'] icon"))).click()
wait = WebDriverWait(webdriver, 10)
wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,"div[id='mainContent'] div div header div[class='navigationHeader hidden-phone'] div div button[track='next-page'] icon"))


# print(browser.find_element_by_xpath("//i[@class='icon icon_arrow_right']"))
# print(browser.find_element_by_xpath("//button[@aria-label='Next Page']"))
next_Provider = browser.find_element_by_xpath("//compare-providers[@class='navigationHeader visible-phone']/div/div/button[@track='next-page']/icon/i")
#print(//compare-providers[@class='navigationHeader visible-phone']/div/div/button[@track='next-page']/icon/i)

# print(browser.find_element_by_xpath("//button[@track='next-page']"))
# print(browser.find_element_by_xpath("//icon[@type=\"'icon_arrow_right'\"]"))

next_Provider.click()

Буду признателен за любые предложения или отзывы!

Ответы [ 3 ]

2 голосов
/ 08 июня 2019

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

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

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[track='next-page'][aria-label='Next Page'] i.icon.icon_arrow_right")))
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@track='next-page' and @aria-label='Next Page']//i[@class='icon icon_arrow_right']")))
    
  • Примечание : необходимо добавить следующие операции импорта:

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

Первый проверяемый элемент виден на странице или нет, после этого нажмите на этот элемент. Вот пример кода:

WebDriverWait wait= new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOf("path of the element"));
browser.find_element_by_xpath("path of the element").click();
0 голосов
/ 09 июня 2019

У меня сработало следующее -

next_page_btn = browser.find_element_by_xpath("//button[@track='next-page']")
next_page_btn.click()
time.sleep(2)
...