Я хочу очистить данные на веб-сайте https://www.climatechangecommunication.org/climate-change-opinion-map/. Я немного знаком с селеном. Но нужные мне данные, находящиеся под картой, и подсказка на карте не видны в исходном файле. Я прочитал несколько сообщений об использовании PhantomJS и других. Однако я не уверен, где и как начать. Может кто-то, пожалуйста, помогите мне начать.
Спасибо, Rexon
Вы можете использовать этот пример кода:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.climatechangecommunication.org/climate-change-opinion-map/")
# switch to iframe
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@src = 'https://environment.yale.edu/ycom/factsheets/MapPage/2017Rev/?est=happening&type=value&geo=county']")))
# do your stuff
united_states = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='document']/div[4]//*[name()='svg']")))
print(united_states.text)
# switch back to default content
driver.switch_to.default_content()
Выход:
50%
No
12%
Yes
70%
United States
Снимок экрана с элемента:
Объяснение: во- первых, чтобы иметь возможность взаимодействовать с элементами под картой, вы должны переключиться на контент iframe
, иначе невозможно взаимодействовать с этими элементами. Затем данные под картой находятся в svg
тегах, которые также не являются тривиальными. Чтобы иметь возможность сделать это, вы предоставили образец.
PS: Я использовал WebDriverWait
в своем коде. С помощью WebDriverWait
ваш код становится более быстрым и стабильным, так как Selenium ждет особых условий, таких как visibility
или clickable
определенного элемента. В образце кода драйвер ждет не менее 10 секунд, пока ожидаемое условие не будет выполнено.