import selenium,selenium.webdriver
import time
import requests
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
URL="https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action="
HEADES={"User-Agent":"Mozilla/5.0(Windows NT 10.0;WOW64) AppleeWebKit/537.36(KHTML,like Gecko chrome 157.0.2987.133 Safari 1537.36"}
class Movie:
def __init__(self,type):
self.img=None
self.name=None
self.type=type
self.rank=None
self.crew=None
self.rating=None
self.comment=None
def __repr__(self):
return "[电影]分类:%s、名称:%s、名次:%d、评分:%f、评论人数:%d、演员列表:%s、图片:%s"% \
(self.type,self.name,self.rating,self.rank,self.comment,self.crew,self.img)
def main():
s= Service("chromedriver.exe")
driver = webdriver.Chrome(service=s)
driver.get(url=URL)
for item in range(5):
target=driver.find_element(By.ID, 'footer')
driver.execute_script("arguments[0].scrollIntoView();",target)
time.sleep(10)
time.sleep(10)
count=0
try:
for content in driver.find_elements(By.XPATH,"//div[@class='movie-content']"):
movie=Movie("剧情")
movie.img=content.find_element(By.CLASS_NAME,"movie-img").get_property("src")
if movie.img:
movie.name=content.find_element(By.CLASS_NAME,"movie-name-text").text
movie.rank=int(content.find_element(By.CLASS_NAME,"rank-num").text)
movie.crew=content.find_element(By.CLASS_NAME,"movie-crew").text.split("/")
movie.rating=float(content.find_element(By.CLASS_NAME,"rating-num").text)
print(movie)
count+=1
if count>=10:
raise Exception("爬够了,休息")
except Exception as exp:
print(exp)
pass
if __name__=="__main__":
main()
看着不像是Service的问题,报错明明是页面元素没有找到?
有更详细的出错信息吗
今天由于谷歌浏览器莫名升级为最新版本,导致使用selenium爬虫时提示驱动chromedriver.exe与浏览器版本不一致,于是从http://npm.taobao.org/mirrors/chromedriver/88.0.4324.96/
上下载了对应最新浏览器版本的驱动,打算替换旧的驱动,却提示被占用
将pycharm关闭后还是不行,百度后:https://blog.csdn.net/weixin_39339460/article/details/108485700
发现有几十个chrome.exe还在进程中被占用,手动一个一个关闭了(╮(╯▽╰)╭),关闭之后成功替换。
这才知道每次使用selenium后不会自动结束chrome.exe进程,加之公司电脑一般不是卡到不能使用,不会关机,导致存留了这么多进程,之后就想着可不可以实现每次运行完或报错后自动结束进程,搜到python selenium 执行完毕关闭chromedriver进程示例
提供了两种方法,第一种方法感觉用不好,就直接参考了第二种简单粗暴的方法
import os
os.system('taskkill /im chromedriver.exe /F')
os.system('taskkill /im chrome.exe /F')
直接将所有的chrome.exe进程全部结束了,心疼我之前手点结束进程20多下(;′⌒`)