Нажмите кнопку подэлемента, когда она появится после нажатия другой кнопки с Python Selenium? - PullRequest
0 голосов
/ 07 октября 2019

У меня проблемы с функцией click() веб-драйвера Selenium в Python, когда я пытаюсь нажимать на кнопки, которые появляются только после нажатия на родительскую кнопку.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = "https://law.lexmachina.com/cases/?pending-from=2000-01-01&pending-to=2000-02-01&filters=true&tab=summary&view=analytics&cols=475"
driver.get(url)
driver = webdriver.Chrome()
elem0 = driver.find_element_by_id('export-icon-container') # this works

all_children_by_css = elem0.find_elements_by_css_selector("*") # this works, but doesn't click on the sub-button (XLS) one successfully when I run below... 
all_children_by_css[0].click() # this just makes the parent button's little window appear and disappear, the same as elem0.click() does.

>>> all_children_by_css[0] # this is the webElement that I thought was for the XLS button
<selenium.webdriver.remote.webelement.WebElement (session="6b4a559408fa4d512f8596759d81eaf7", 
element="d83be2ca-c879-4706-85ef-db7120d345a3")>

По сути, я хочу экспортировать файл XLS через Webdriver, чтобы позже я мог сделать это в цикле с URL-адресами фильтров данных.

Iниже приведены аннотированные снимки экрана, подробно описывающие кнопки, которые я пытаюсь нажать, и проверенный код, связанный с ними.

Inspected code for the parent button of interest

Inspected code for the parent button of interest when hovering over it

Inspected code for the parent button of interest when clicking on it

Inspected code for the newly-appeared button of interest (the XLS one). I can't get the Webdriver to click it.

1 Ответ

0 голосов
/ 07 октября 2019

Я бы порекомендовал посмотреть, есть ли на странице API для экспорта напрямую. если нет, то вам, вероятно, потребуется динамическое ожидание. Вы можете попробовать что-то вроде ниже.

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

driver = webdriver.Chrome()
url = "https://law.lexmachina.com/cases/?pending-from=2000-01-01&pending-to=2000-02-01&filters=true&tab=summary&view=analytics&cols=475"
driver.get(url)

#Click on Export Icon
elem0 = driver.find_element_by_id('export-icon-container').click() 

#Wait for XLS option to show up
wait = WebDriverWait(driver, 10)
ExportOption= wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@data-action='export-item'][contains(text(),'XLS')]")))
ExportOption.click()
...