selenium爬异步加载私域项目管理系统

首先,安装包。不知道为什么清华源失效,故用豆瓣源

pip install xxx -i https://pypi.douban.com/simple/

然后 加载selenium库

 

狗屎优化项目:新版selenium (截至2024.3.25) 会自动下载并载入webDriver,不需要以前的手动加载,新版selenium会自动将webDriver下载到C:\Users\用户名\.cache\selenium\chromedriver\win64或32\浏览器版本号\chromedriver.exe目录下

每隔久一点启动或缓存被清理后, selenium就会检查webDriver更新并重新下载,重新下载的过程中程序无法运行,而且由于网络问题,重新下载webDriver往往要花费极长的时间,用户体验非常差。

 

此处自己重设一下,使用selenium中的service类手动加载webDriver

首先,查看自己浏览器版本号。此处为google。设置-关于chrome

第一步:在https://googlechromelabs.github.io/chrome-for-testing/网站下载对应Chrome版本的chromedriver(其他浏览器如Edge请自行解决),举例,我的电脑安装的是windows 64位的稳定版128版本Chrome就找到 128. + stable + win64 然后复制右边的下载链接进行下载

参照以下代码用service加载驱动即可

from bs4 import BeautifulSoup
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
service = Service(' 驱动.exe路径')
driver = webdriver.Chrome(service=service)
driver.get("访问的网站")

 

IT给的代码:

from bs4 import BeautifulSoup
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service(r'C:\Users\yuanzhilong\yelan\chromedriver-win64\chromedriver.exe') #替换自己的驱动chromedriver
driver = webdriver.Chrome(service=service)
driver.get("http://southchips.net:8802/")
time.sleep(2)
username = driver.find_element(By.ID,"account")
username.send_keys("")
password = driver.find_element(By.ID,"password")
password.send_keys("")
time.sleep(2)
login_button = driver.find_element(By.ID,"btnSubmit")
login_button.click()
time.sleep(5)
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
document_items = soup.find_all('tr', class_='document-list-item')
# 获取table的第一个doc,找到td标签所有的元素==>获取table的所有的行元素-集合
td_elements = document_items[0].find_all('td')
#获取table的第一行,第二列;备注:第一列为checkbox,无内容
spa1 = td_elements[1]
# 获取text内容,first_dir_name为文件名
first_dir_name = spa1.get_text()
print('文件名称='+first_dir_name)
# 思想:通过<td><span>text</span></td> 通过内容text获取span的标签,然后通过span标签触发点击事件
# 使用XPath
# element_name = "元素名称"
if first_dir_name != '':
    element = driver.find_element(By.XPATH, '//span[text()="Project"]') # Customer Materials 是文件名可以替换
    element.click()
    time.sleep(5)

 

问题:切换页面之后,获取到的元素依旧是原页面

思考:click后在同一页面跳转,all_h也只有一个handle的情况,目前只有一个折中方法,通过drver.current_url获取当前网址,再传参给get,就等于打开一个新窗口,自然就能同一页面网址切换想获取切换后网页的问题,缺点是效率有点低。(来源知乎,@Quiero)

html_url = driver.current_url
driver.get(html_url)
soup = BeautifulSoup(driver.page_source, "html.parser")

妈的 ,然后发现同链接下做了分段展示,还得点下一页

<span class="l-btn-text l-btn-istext">下一页</span>

妈的,要下拉才能找到下一页的按钮

妈的,下拉之后元素失效,需要重新定位才能点

妈的,逻辑要重做,要爬数据-输出数据-点击-爬数据-输出数据-点击的循环

妈的,只有6列数据,但是数据框有9列,神经

vscode批量取消缩进:shift tab

参考:

http://t.csdnimg.cn/hyom3

版权声明:
作者:夜阑
链接:http://yelan.xyz/index.php/2024/09/02/selenium%e7%88%ac%e5%bc%82%e6%ad%a5%e5%8a%a0%e8%bd%bd%e7%a7%81%e5%9f%9f%e9%a1%b9%e7%9b%ae%e7%ae%a1%e7%90%86%e7%b3%bb%e7%bb%9f/
来源:夜阑的小站
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>