python-selenium-下拉框的处理

看到了这样的:

 python-selenium-下拉框的处理_第1张图片

 就是下拉框,可以把他包装为一个下拉了列表使用

"""包装为下拉列表需要的包"""
from selenium.webdriver.support.select import Select

一般为:

 #遇下拉框,把他包装成为下拉列表
        sel=Select(driver.find_element(By.XPATH,'/html/body/section/div/div[2]/div/div/div[1]/select'))
        """
         #下拉框中的选项有三中定位方式
        #通过value选取下拉列表中的选项
        sel.select_by_value("6129")
        # 通过文本选取下拉列表中的选项
        sel.select_by_visible_text("2020年 第5周 01月31日-02月02日")
        #通过下标索引选取下拉列表中的选项(从零开始数)
        sel.select_by_index(1) #第10周
        """

python-selenium-下拉框的处理_第2张图片

 其中的value,     后面的文字为:文本信息

eg 1:

from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get("https://news.sina.com.cn/")
driver.implicitly_wait(30)
"""
下拉列表,select元素,处理select元素
"""
try:
    sel=Select(driver.find_element(By.CLASS_NAME,'pr_ch'))
    for i in range(len(sel.options)):
        sel.select_by_index(i)
        #find_elements加s返回去的是一个列表所有,必须使用循环来点击
        h1=driver.find_elements(By.XPATH,'//*[@id="syncad_1"]/h1/a[@target="_blank"]')
        for i in range(len(h1)):
            h1[i].click()
            print(f"{h1[i].text}----打开成功  \n")


        driver.switch_to.window(driver.window_handles[0])

except Exception as E:
    print(f"出错了,错误是:{E}")
finally:
    driver.quit()#关闭所有窗口




eg 2:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.select import Select


def selenium_asd():
    try:
        # 1:打开浏览器
        driver=webdriver.Chrome()
        # 2:输入你的网站
        driver.get('https://www.endata.com.cn/BoxOffice/BO/Global/global.html')
        driver.implicitly_wait(30)
        #遇下拉框,把他包装成为下拉列表
        sel=Select(driver.find_element(By.XPATH,'/html/body/section/div/div[2]/div/div/div[1]/select'))
        """
         #下拉框中的选项有三中定位方式
        #通过value选取下拉列表中的选项
        sel.select_by_value("6129")
        # 通过文本选取下拉列表中的选项
        sel.select_by_visible_text("2020年 第5周 01月31日-02月02日")
        #通过下标索引选取下拉列表中的选项(从零开始数)
        sel.select_by_index(1) #第10周
        """
        #获取下拉列表中的所有元素
        for i in range(len(sel.options)):
            sel.select_by_index(i)


    except Exception as E:
        print(f"出错的原因是{E}")

    finally:
        time.sleep(100)
if __name__ == '__main__':
    selenium_asd()

eg 3:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.select import Select
from selenium.webdriver.chrome.options import Options
import csv
#取消浏览器中的自动化程序正在控制浏览器
opt = Options()
opt.add_experimental_option('excludeSwitches',['enable-automation'])

def selenium_asd():
    try:
        # 1:打开浏览器
        driver=webdriver.Chrome(options=opt)
        # 2:输入你的网站
        driver.get('https://www.endata.com.cn/BoxOffice/BO/Global/global.html')
        driver.implicitly_wait(30)
        #遇下拉框,把他包装成为下拉列表
        sel=Select(driver.find_element(By.XPATH,'/html/body/section/div/div[2]/div/div/div[1]/select'))
        """
         #下拉框中的选项有三中定位方式
        #通过value选取下拉列表中的选项
        sel.select_by_value("6129")
        # 通过文本选取下拉列表中的选项
        sel.select_by_visible_text("2020年 第5周 01月31日-02月02日")
        #通过下标索引选取下拉列表中的选项(从零开始数)
        sel.select_by_index(1) #第10周
        """
        #获取下拉列表中的所有元素


        for i in range(len(sel.options)):

            print(f"开始写入第{i+1}页数据")

            sel.select_by_index(i)
            time.sleep(2)


            text=driver.find_elements(By.XPATH,'//*[@id="OW_Week_Table"]/tbody/tr')

            for a in text:

                name=a.find_element(By.XPATH,'./td[2]/a/p').text

                Weekend_box_office=a.find_element(By.XPATH,"./td[4]").text.replace(" --","")

                Cumulative_box_office=a.find_element(By.XPATH,'./td[5]').text

                Release_country=a.find_element(By.XPATH,"./td[6]").text

                Number_of_weeks=a.find_element(By.XPATH,"./td[7]").text
                with open('艺恩票房.csv', mode='a+', encoding='utf-8', newline='') as f:
                    wirter = csv.writer(f)  # 创建一个写入的对象
                    if i==0 and name=="喋血战士":
                        wirter.writerow(['影片名称', '周末票房(万)', '累计票房(万)', '国家及地区数', '上映周数'])  # 设置第一行标

                    wirter.writerow([name, Weekend_box_office, Cumulative_box_office, Release_country, Number_of_weeks])
            print(f"开始写入第{i + 1}页数据----写入完成")



    except Exception as E:
        print(f"出错的原因是{E}")
    finally:
        print(f"全部爬取完毕---请关闭浏览器")
        time.sleep(100)

if __name__ == '__main__':
    selenium_asd()
   

你可能感兴趣的:(selenium,测试工具)