Как почистить картографию / карту - селен не работает - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь получить адреса для всех точек доступа в Бельгии с этого сайта: https://www.ibpt.be/en/consumers/post/cartography

Я использую Selenium с python 3, и я могу ' Кажется, он не работает, хотя обычно он работает на других сайтах. Я полагаю, что это может быть потому, что карта в некотором роде особенная? (Но я подумал, что это когда Selenium действительно необходим).

Ниже приведен очень простой код, который я пытаюсь заставить работать (в конце концов мне нужно также вставить почтовый индекс и сохранить результаты, но сначала Я даже не могу заставить его нажать кнопку поиска).

Кто-нибудь может помочь? (кстати, если есть более простой и быстрый способ сделать это (без Selenium), пожалуйста, поделитесь).

driver = webdriver.Chrome(r"XXX\chromedriver")
driver.get("https://www.ibpt.be/en/consumers/post/cartography")

time.sleep(3)

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'body > app-root > div > app-filter > div > div.content > div > form > div.max-height-search-button > div > input')))
time.sleep(3)
ActionChains(driver).move_to_element(driver.find_element_by_css_selector('body > app-root > div > app-filter > div > div.content > div > form > div.max-height-search-button > div > input')).perform()
time.sleep(3)
search = driver.find_element_by_css_selector('body > app-root > div > app-filter > div > div.content > div > form > div.max-height-search-button > div > input')
search.click()

1 Ответ

0 голосов
/ 26 февраля 2020

Поскольку требуемый элемент находится в пределах <iframe>, поэтому для вызова click() на элементе необходимо:

  • Ввести WebDriverWait для требуемого рамка должна быть доступна и переключиться на нее .
  • Индуцировать WebDriverWait , чтобы требуемый элемент был активным .
  • You можно использовать следующее решение:

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

      driver.get('https://www.ibpt.be/en/consumers/post/cartography')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src*='postalpoint']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.search-location-button>input.bt-search[value='Search']"))).click()
      
    • Использование XPATH:

      driver.get('https://www.ibpt.be/en/consumers/post/cartography')
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@src, 'postalpoint')]")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='search-location-button']/input[@class='bt-search' and @value='Search']"))).click()
      
    • Примечание : необходимо добавить следующие операции импорта:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
  • Снимок браузера:

Belgian_Institute_for_Postal_services


Ссылка

Вы можете найти пару соответствующих обсуждений в:

...