Вы можете использовать driver.execute_script()
для выполнения sh этого. Вот как я изменяю атрибут style
в своем собственном коде:
div_to_change = driver.find_element_by_id("filtersWrapper")
driver.execute_script("arguments[0].style.display = 'block';", div_to_change)
Я посмотрел на веб-сайт, который вы автоматизируете, и вам вообще может не понадобиться использовать JSE для этого - есть причина div
, которую вы пытаетесь щелкнуть, имеет style = "display: none"
- она не предназначена для нажатия в этом контексте. Обход этого с Javascript может не дать ожидаемых результатов. Этот фрагмент кода был обновлен в соответствии с вашими требованиями для установки фильтра времени в разделе календаря Economi c:
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
driver.get("https://www.investing.com/economic-calendar/")
driver.find_element_by_id("economicCurrentTime").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "filterStateAnchor"))).click()
checkbox_for_bull3 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//*[@id='importance2']")))
driver.execute_script("arguments[0].scrollIntoView(true);", checkbox_for_bull3)
checkbox_for_bull3.click()
checkbox_for_time = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//fieldset[label[@for='timeFiltertimeOnly']]/input")))
checkbox_for_time.click()
Я изменил ваш фрагмент кода, чтобы устранить некоторые проблемы - при переходе к economic-calendar
страница, вы дважды щелкали по полю «Фильтры», что вызывало проблему при попытке нажать checkbox_for_bull3
. Я также добавил вызов scrollIntoView()
Javascript.
Я выполнил это на своем локальном компьютере, и код успешно завершился.