看到了这样的:
就是下拉框,可以把他包装为一个下拉了列表使用
"""包装为下拉列表需要的包"""
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周
"""
其中的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()