关于#python#的问题:s= Service("chromedriver.exe")

img


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的问题,报错明明是页面元素没有找到?

有更详细的出错信息吗

  • 你可以参考下这篇文章:Python网络爬虫:怎么下载和配置chromedriver.exe
  • 除此之外, 这篇博客: python selenium 删除chromedriver.exe提示被占用问题解决中的 python selenium 替换chromedriver.exe提示被占用问题解决 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 今天由于谷歌浏览器莫名升级为最新版本,导致使用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还在进程中被占用,手动一个一个关闭了(╮(╯▽╰)╭),关闭之后成功替换。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128111020109.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Rldm9lbg==,size_16,color_FFFFFF,t_70
    这才知道每次使用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多下(;′⌒`)