源代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Edge("edgedriver_win32\msedgedriver.exe")
driver.get("https://www.bilibili.com/")
current_window = driver.current_window_handle
#定位元素进行搜索
driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("蔡徐坤")
driver.find_element(By.CLASS_NAME,"nav-search-btn").click()
sleep(4)
#用于切换页面
for window_handle in driver.window_handles:
if window_handle != current_window:
driver.switch_to.window(window_handle)
break
#定位元素
text = driver.find_elements(By.CLASS_NAME,"bili-video-card__info--tit")
for tt in text:
title = tt.get_attribute("title")
print("*********")
print(title)
接下来一条条说
元素定位
定位可以看我之前的文章,这里使用了class定位方法
操作
driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("蔡徐坤")
driver.find_element(By.CLASS_NAME,"nav-search-btn").click()
这部分操作就是在bilibili主界面中获取搜索框界面并进行点击
页面切换
# 获取当前窗口句柄
current_window = driver.current_window_handle
# 点击搜索按钮,打开新页面
search_button = driver.find_element_by_id("search-button")
search_button.click()
# 切换到新页面
for window_handle in driver.window_handles:
if window_handle != current_window:
driver.switch_to.window(window_handle)
break
# 在新页面中执行操作
title = driver.find_element_by_xpath("//h1[text()='My Title']").text
print(title)
# 切换回旧页面
driver.switch_to.window(current_window)
根据自己的需求改变代码即可
获取元素内容
这里我使用find_elements,可以获取所有同名元素的列表,配合循环即可获取所有内容
text = driver.find_elements(By.CLASS_NAME,"bili-video-card__info--tit")
for tt in text:
title = tt.get_attribute("title")
这个爬取做的不是很完善,还可以加入点击进去获取播放量,三连数据等等,以及该代码只能自动获取搜索出来的一页内容。