繁体   English   中英

如何使用 selenium 通过 python 下拉元素?

[英]how to drop down an element by python with selenium?

我想从英国贸易网站检索数据。 我一步有一个小问题。 当我的代码打开网站时,我应该一步一步点击下拉菜单,然后选择我需要的章节 select。 我的问题是我应该在 select 下拉菜单中使其激活 你能帮我一个忙并帮助我吗? 我怎样才能 select 下拉菜单。 我由python selenium编写了代码。 我完全是网络抓取的初学者。

网址: https://www.uktradeinfo.com/trade-data/ots-custom-table/

在此处输入图像描述

driver = webdriver.Chrome('C:\Webdriver\chromedriver.exe')
driver.get('https://www.uktradeinfo.com/trade-data/ots-custom-table/')
time.sleep(3)

driver.find_element(By.XPATH, '//*[@id="row-1"]/option[1]').click()      # Commodity Scroll bar         
driver.find_element(By.XPATH, '//*[@id="row-2"]/option[4]').click()      # Country By (continent)
driver.find_element(By.XPATH, '//*[@id="row-3"]/option[1]').click()      # Add another dimention
driver.find_element(By.XPATH, '//*[@id="main-content"]/div[2]/div[1]/fieldset[2]/details/summary').click()    #Change column headings
time.sleep(1)


time.sleep(1)
driver.find_element_by_id("volumes-value").click()          # Value GBM should be unselected by this line
driver.find_element_by_id("volumes-net-mass").click()       # Net Mass (Kg) shoul be selected
time.sleep(1)


    # Chapter 2
driver.find_element(By.XPATH, '//*[@id="pvExplorationHost"]/div/div/exploration/div/explore-canvas/div/div[2]/div/div[2]/div[2]/visual-container-repeat/visual-container-group[1]/transform/div/div[2]/visual-container[5]/transform/div/div[2]/div[1]/visual-modern/div/div/div[2]/div/div').click()

您的主要问题是-您尝试单击的下拉列表位于 iframe 中,因此您需要切换到它。 此外,最好等待元素在页面中正确加载(例如,可点击),然后再尝试定位它们)。 下面的代码还将演示Select的使用。 selenium/chromedriver 设置适用于 linux,但您可以将其调整为您自己的设置,只需注意导入以及定义浏览器后的代码(驱动程序,在您的情况下):

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.relative_locator import locate_with
import time as t


chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
webdriver_service = Service("chromedriver/chromedriver") ## path to where you saved chromedriver binary
browser = webdriver.Chrome(service=webdriver_service, options=chrome_options)

url = 'https://www.uktradeinfo.com/trade-data/ots-custom-table/'
browser.get(url)

## sortout cookie button
try:
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@data-accept-cookies='true']"))).click()
    print("accepted cookies")
except Exception as e:
    print('no cookie button')
    
select_commodities = Select(WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='row-1']"))))
select_commodities.select_by_index(1)
print('selected commodities ')
extra_dimension_1 = Select(WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='row-2']"))))
extra_dimension_1.select_by_index(3)
print('added dimension country by continent')
extra_dimension_2 = Select(WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='row-3']"))))
extra_dimension_2.select_by_index(4)
print('added dimension by uk port')
# click the slicer slicer-dropdown-menu, which is in an iframe, so we need to switch to it
WebDriverWait(browser, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//*[@title='Overseas Trade Statistics Power BI report']")))
t.sleep(2)
slicer = WebDriverWait(browser, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='slicer-restatement']")))[4]
t.sleep(10)
slicer.click()
print('clicked the slicer')

完成 iframe 后,不要忘记使用browser.switch_to.default_content()切换回主要内容。 Selenium 文档位于https://www.selenium.dev/documentation/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM