如何循环使用元素

2024-09-29 19:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网站,我想下载excel文件。(https://www.rivm.nl/media/smap/eenzaamheid.html

首先,我想单击该区域,然后执行下载。这是我一直在工作的地方

wijk_keuze = WebDriverWait(driver2nd,20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='highcharts-container ']//*[name()='svg']//*[name()='g']//*[name()='path']")))
wijk_keuze.click()
download = WebDriverWait(driver2nd, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='highcharts-container ']//*[name()='svg']//*[name()='g' and @aria-label='View export menu']//*[name()='rect']")))  
download.click()
WebDriverWait(download, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='highcharts-menu']//*[contains(text(),'XLS downloaden')]"))).click()
time.sleep(2)

上面的代码选择父元素中的第一个区域,然后下载excel。 我要做的是循环父元素中的每个元素。我该怎么做呢

父元素如下所示:

<g transform="transform(0,0), scale(1,1)" animator="1">

我的全部代码:

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

#defining URL
url='https://www.rivm.nl/media/smap/eenzaamheid.html'

#defining driver
driver = webdriver.PhantomJS(r'./phantomjs-2.1.1-windows/bin/phantomjs')
options = webdriver.ChromeOptions()
options.add_argument("start-maximized");
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(options=options, executable_path = r'./chromedriver_win32/chromedriver')
driver.get(url)

# Gemeentes 

Detail_keuze = Select(driver.find_element_by_id("detail"))
options = Detail_keuze.options
Indicator_keuze = Select(driver.find_element_by_id("indicator"))
indicator_options = Indicator_keuze.options


for index in range(0, len(indicator_options) ):
    #defining URL
    url='https://www.rivm.nl/media/smap/eenzaamheid.html'

    #defining driver
    driver2nd = webdriver.PhantomJS(r'./phantomjs-2.1.1-windows/bin/phantomjs')
    options = webdriver.ChromeOptions()
    options.add_argument("start-maximized");
    options.add_argument("disable-infobars")
    options.add_argument("--disable-extensions")
    options.add_experimental_option("prefs", {
        "download.default_directory": r"MY_PATH",
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing.enabled": True
        })
    driver2nd = webdriver.Chrome(options=options, executable_path = r'./chromedriver_win32/chromedriver')
    driver2nd.get(url)

    # Gemeentes 
    Detail_keuze = Select(driver2nd.find_element_by_id("detail"))
    options = Detail_keuze.options
    Indicator_keuze = Select(driver2nd.find_element_by_id("indicator"))
    indicator_options = Indicator_keuze.options
    time.sleep(1)

    Indicator_keuze.select_by_index(index)
    wijk_keuze = WebDriverWait(driver2nd,20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='highcharts-container ']//*[name()='svg']//*[name()='g']//*[name()='path']")))
    wijk_keuze.click()

    download = WebDriverWait(driver2nd, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='highcharts-container ']//*[name()='svg']//*[name()='g' and @aria-label='View export menu']//*[name()='rect']")))  
    download.click()
    WebDriverWait(download, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='highcharts-menu']//*[contains(text(),'XLS downloaden')]"))).click()
    time.sleep(2)
######## HERE I WANT TO LOOP THROUGH EACH AND EVERY REGION
    driver2nd.close()  
    

正如你所看到的,我还想循环检查每个小时和每个指标。这很有效。现在我想通过每个区域添加一个循环。我让它工作,这样我就可以点击第一个区域


Tags: namefromimportaddbydownloaddriverselenium
1条回答
网友
1楼 · 发布于 2024-09-29 19:18:57

你不必点击选项。您可以通过更改url'https://www.rivm.nl/media/smap/{indicator}?detail={detail}'来获取详细信息 只需添加下载逻辑即可

尝试:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from itertools import product

chrome_options = Options()
chrome_options.add_argument(" headless")
driver = webdriver.Chrome(ChromeDriverManager().install())#, chrome_options=chrome_options)
driver.set_window_size(1024, 600)
driver.maximize_window()
driver.get('https://www.rivm.nl/media/smap/eenzaamheid.html')
time.sleep(5)
soup  = BeautifulSoup(driver.page_source, 'html.parser')
ind = soup.find('select', attrs = {'name': 'indicator'} )
indicators = [i['value'] for i in ind.findAll('option')]

det = soup.find('select', attrs = {'name': 'detail'})
details = [i['value'] for i in det.findAll('option')]
for detail, indicator in list(product(details, indicators)):
    print(indicator, detail)
    new_url = f'https://www.rivm.nl/media/smap/{indicator}?detail={detail}'
    driver.get(new_url)
   # Write code for downloading it 

相关问题 更多 >

    热门问题