Кажется, я не могу выбрать палитру диапазонов дат по XPATH, используя селен - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь удалить данные из http://covid.gov.pk/stats/pakistan. Я хочу, чтобы скрипт мог щелкнуть по палитре диапазонов дат, чтобы изменить даты, но я не могу выбрать его, используя XPATH, который я использую, следующим образом.

//*[@id="body"]/div/div/div[1]/div[2]/div/div[1]/div[1]/div[1]/div/lego-report/lego-canvas-container/div/file-drop-zone/span/content-section/canvas-component[66]

Python скрипт, который я использую

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

driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.get("http://covid.gov.pk/stats/pakistan")

#wait for Page to load
WebDriverWait(driver, 30, ).until(EC.invisibility_of_element((By.XPATH, "//div[@id=\"preloader\"]")))

#select date range picker
element = driver.find_element_by_xpath("//*[@id=\"body\"]/div/div/div[1]/div[2]/div/div[1]/div[1]/div[1]/div/lego-report/lego-canvas-container/div/file-drop-zone/span/content-section/canvas-component[66]")
element.click()

Ошибка, с которой я сталкиваюсь, следующая:

Невозможно найти элемент: {"method": "xpath", "selector": "// * [@ id = "тело"] / дела / дела / дела [1] / дела [2] / дела / дела [1] / дела [1] / дела [1] / дела / ль * +1018 * -report / ль go -canvas-container / div / file-drop-zone / span / content-section / canvas-component [66] "} (информация о сеансе: chrome = 81.0.4044.113)

Не могу показаться чтобы выяснить, что именно не работает, я скопировал xpath, проверив элемент с помощью инструментов разработчика в chrome.

1 Ответ

1 голос
/ 21 апреля 2020

Элемент выбора даты находится внутри iframe. Вам нужно сначала переключить iframe, чтобы получить доступ к средству выбора даты.

Введите WebDriverWait () и дождитесь frame_to_be_available_and_switch_to_it () и используйте следующий селектор css.

Затем вы можете щелкнуть по датчику, используя следующий xpath.

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

driver = webdriver.Chrome()
driver.get("http://covid.gov.pk/stats/pakistan")
#wait for Page to load
WebDriverWait(driver,30).until(EC.invisibility_of_element((By.XPATH, "//div[@id='preloader']")))
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,".pak-stats-ifrm")))
#select date range picker
element = driver.find_element_by_xpath("//div[@class='content-holder ng-scope']")
element.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...