селеновый хромедрайвер разные значения xpath между терминалом и фактическим драйвером - PullRequest
0 голосов
/ 04 апреля 2020
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
url = 'https://www.msha.gov/mine-data-retrieval-system'
driver = webdriver.Chrome(executable_path='chromedriver')
driver.get(url)
#driver.find_element_by_xpath('//*[@id="mstr90"]/div[1]/div/div') error
#driver.find_elements_by_xpath('//input') gives 3 while in driver gives 10

Я не могу найти элемент, где ввод "Поиск по идентификатору шахты, введя здесь ..", документ полностью загружен, но он не может найти его. То, что я хочу сделать, это просто ввести вход «0100003», а затем отправить

Ответы [ 2 ]

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

Iframe присутствует на вашей странице. Перед тем, как взаимодействовать с полем ввода, необходимо включить iframee. Для устранения проблемы воспользуйтесь приведенным ниже кодом.

wait = WebDriverWait(driver, 10)
driver.get("https://www.msha.gov/mine-data-retrieval-system")

driver.switch_to.frame("iframe1")
wait = WebDriverWait(driver, 10)
inputBox = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='mstrmojo-SimpleObjectInputBox-empty']"))).click()
inputBox1 = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='mstrmojo-SimpleObjectInputBox-container mstrmojo-scrollNode']//input")))
inputBox1.send_keys("0100003")

Обновлен код для обработки выпадающего списка

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#mstr100,mstrmojo-Popup.mstrmojo.SearchBoxSelector-suggest"))).click()

Примечание. Пожалуйста, добавьте ниже импорта в ваше решение

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

Выход:

enter image description here

0 голосов
/ 04 апреля 2020

Элемент, который вы пытаетесь найти, находится внутри iframe, поэтому вам нужно сначала переключиться на этот iframe, а затем выполнить свой элемент find. Кроме того, рекомендуется использовать время ожидания, чтобы дать страницам / элементам время для загрузки до истечения времени ожидания элемента поиска и выдает ошибку.

iframe = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#iframe1')))

driver.switch_to.frame(iframe)

mine_id = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, '//*[@id="mstr90"]/div[1]/div/div')))

Затем необходимо щелкнуть этот элемент, чтобы сделать его взаимодействующим.

mine_id.click()

После того, как вы щелкнете, вам необходимо повторно найти поле ввода перед отправкой ключей.

mine_id_input = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mstr90 input')))

mine_id_input.send_keys('0100003')

Чтобы выбрать отображаемое предложение:

suggestion = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mstr100')))

suggestion.click()

, если вы Если вы захотите продолжить взаимодействие вне iframe после того, как это будет сделано, вы захотите переключиться обратно из iframe следующим образом:

driver.switch_to.default_content()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...