selenium+webdriver实现自动评论csdn下载资源

wylc123 1年前 ⋅ 563 阅读
#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnPl.py

from selenium import webdriver
import time

# browser=webdriver.Chrome()#用google会报错,暂时不知道为什么
browser = webdriver.Firefox()
browser.get('https://passport.csdn.net/account/login')

# 转到用户名密码登陆,这里是个难点,卡了我好久,后来在stackoverflow上看到这样的解决方案,试了一下,果然灵
aElements = browser.find_elements_by_tag_name("a")
for name in aElements:
    if (name.get_attribute("href") is not None and "javascript:void" in name.get_attribute("href")):
        print("IM IN HUR")
        name.click()
        break

time.sleep(0.5)
browser.find_element_by_id('username').send_keys('你的用户名')
# time.sleep(0.5)
browser.find_element_by_id('password').send_keys('你的密码')
# time.sleep(0.5)
browser.find_element_by_class_name('logging').click()

print("logging success!")
time.sleep(2)
# print (browser.page_source)
# 转到的下载页面
browser.get('https://download.csdn.net/my/downloads')
# 获取我下载过的内容的评价链接
time.sleep(0.5)
# 获取总的页数
lastpage = browser.find_element_by_link_text("尾页").get_attribute('href')
# print (lastpage)
totlapage = int(lastpage[len(lastpage) - 2:])
for i in range(2, totlapage + 1):
    # 构造下载链接
    url1 = 'https://download.csdn.net/my/downloads/' + str(i)
    # 打开每一页
    browser.get(url1)
    time.sleep(0.5)
    # 获取评论链接
    urlc = browser.find_elements_by_link_text("立即评价")
    for comment_link_per_page in urlc:
        # 转到评论链接
        try:
            print(comment_link_per_page.get_attribute('href'))
            commurl = comment_link_per_page.get_attribute('href')
            # 打开新的标签页
            browser.execute_script("window.open()")
            print(browser.window_handles)
            # 切换到新的标签页中
            browser.switch_to.window(browser.window_handles[1])
            # 打开评论链接
            browser.get(commurl)
            time.sleep(1)
            #点击评论填写框触发样式
            browser.find_element_by_id("cc_body").click()
            time.sleep(0.5)
            # 输入评论内容
            browser.find_element_by_id('cc_body').send_keys("非常感谢作者分享,还可以参考[url=https://www.songbin.top/ta/18]https://www.songbin.top/ta/18[/url]来解决该问题!")
            time.sleep(0.5)
            # 给出几颗星,这里默认给出的是五颗星(xpath定位比css定位好使,有时候css定位不行但是xpath定位却可以,但是xpath可能会有变化,首选css定位,神奇)
            browser.find_element_by_css_selector("#csdn_dl_commentbox>li[class='stats'] :last-child").click()
            #browser.find_element_by_xpath("/html/body/div[5]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[1]/ul/li[2]/i[5]").click()
            time.sleep(0.5)
            # 点击发表评论
            browser.find_element_by_css_selector(".comm_btn").click()
            #browser.find_element_by_xpath("/html/body/div[6]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/button").click()
            time.sleep(0.5)
            # 关闭打开的标签页
            browser.execute_script("window.close()")
            # 返回原来的tab标签页中
            browser.switch_to.window(browser.window_handles[0])
        except:
            browser.execute_script("window.close()")

selenium+webdriver实现自动化登陆并评论csdn下载过的资源

1、安装selenium

    很简单,控制台pip install selenium即可

安装pip,到easy_install.exe所在的地方Scripts目录下,执行指令“easy_install.exe pip”

2、下载安装三大浏览器驱动driver放在python根目录中,将python根目录设置环境变量

     1.chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list

     2.Firefox的驱动geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/

     3.IE的驱动IEdriver 下载地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver/

注意:下载解压后,将chromedriver.exe , geckodriver.exe , Iedriver.exe发到Python的安装目录,例如 D:\python 。 然后再将Python的安装目录添加到系统环境变量的Path下面。

注意驱动与浏览器的版本对应关系

chromedriver与chrome版本对应表,firefox、geckodriver

 

chromedriver与chrome对应表(记得就会更新):

chromedriver版本 支持的Chrome版本
v2.36 v64-66
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55
v2.24 v52-54
v2.23 v51-53
v2.22 v49-52
v2.21 v46-50
v2.20 v43-48
v2.19 v43-47
v2.18 v43-46
v2.17 v42-43
v2.13 v42-45
v2.15 v40-43
v2.14 v39-42
v2.13 v38-41
v2.12 v36-40
v2.11 v36-40
v2.10 v33-36
v2.9 v31-34
v2.8 v30-33
v2.7 v30-33
v2.6 v29-32
v2.5 v29-32
v2.4 v29-32

下载chromedriver地址:http://chromedriver.storage.googleapis.com/index.html

二、

firefox与geckodriver对应表,在网上找了好像没有很明确对应关系,

本人在windows上的firefox经常自己update,估计并不是按照版本号对应起来的。

在linux上 直接yum install firefox 安装即可

下载geckodriver地址:https://github.com/mozilla/geckodriver/releases

3,测试是否可以正常运行

然后打开Python IDLE分别输入以下代码来启动不同的浏览器

启动谷歌浏览器

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnPl.py
import time
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
'''
当浏览器没有默认安装路径安装时
binary = FirefoxBinary('C:\\Program Files\\Chrome \\Chrome.exe')
browser=webdriver.Chrome(chrome_binary=binary)
'''
browser=webdriver.Chrome()
browser.get('https:/www.csdn.net')
time.sleep(3)
browser.close()

启动火狐浏览器

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnPl.py
import time
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
'''
当浏览器没有默认安装路径安装时
binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
browser=webdriver.Firefox(firefox_binary=binary)
'''
browser=webdriver.Firefox()
browser.get('https:/www.csdn.net')
time.sleep(3)
browser.close()

启动IE浏览器

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnPl.py
import time
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
'''
当浏览器没有默认安装路径安装时
binary = FirefoxBinary('C:\\Program Files\\Mozilla ie\\ie.exe')
browser=webdriver.Ie(ie_binary=binary)
'''
browser=webdriver.Ie()
browser.get('https:/www.csdn.net')
time.sleep(3)
browser.close()

4.技巧:

selenium(二)查找定位目标 ID XPATH CSS 操作目标

元素定位之CssSelector

css_selector定位总结

 

5.最终脚本

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnPl.py

from selenium import webdriver
import time

# browser=webdriver.Chrome()#用google会报错,暂时不知道为什么
browser = webdriver.Firefox()
browser.get('https://passport.csdn.net/account/login')

# 转到用户名密码登陆,这里是个难点,卡了我好久,后来在stackoverflow上看到这样的解决方案,试了一下,果然灵
aElements = browser.find_elements_by_tag_name("a")
for name in aElements:
    if (name.get_attribute("href") is not None and "javascript:void" in name.get_attribute("href")):
        print("IM IN HUR")
        name.click()
        break

time.sleep(0.5)
browser.find_element_by_id('username').send_keys('dfjjfxyl')
# time.sleep(0.5)
browser.find_element_by_id('password').send_keys('Wylc1234567')
# time.sleep(0.5)
browser.find_element_by_class_name('logging').click()

print("logging success!")
time.sleep(2)
# print (browser.page_source)
# 转到的下载页面
browser.get('https://download.csdn.net/my/downloads')
# 获取我下载过的内容的评价链接
time.sleep(0.5)
# 获取总的页数
lastpage = browser.find_element_by_link_text("尾页").get_attribute('href')
# print (lastpage)
totlapage = int(lastpage[len(lastpage) - 2:])
for i in range(2, totlapage + 1):
    # 构造下载链接
    url1 = 'https://download.csdn.net/my/downloads/' + str(i)
    # 打开每一页
    browser.get(url1)
    time.sleep(0.5)
    # 获取评论链接
    urlc = browser.find_elements_by_link_text("立即评价")
    for comment_link_per_page in urlc:
        # 转到评论链接
        try:
            print(comment_link_per_page.get_attribute('href'))
            commurl = comment_link_per_page.get_attribute('href')
            # 打开新的标签页
            browser.execute_script("window.open()")
            print(browser.window_handles)
            # 切换到新的标签页中
            browser.switch_to.window(browser.window_handles[1])
            # 打开评论链接
            browser.get(commurl)
            time.sleep(1)
            #点击评论填写框触发样式
            browser.find_element_by_id("cc_body").click()
            time.sleep(0.5)
            # 输入评论内容
            browser.find_element_by_id('cc_body').send_keys("非常感谢作者分享,还可以参考[url=https://www.songbin.top/ta/18]https://www.songbin.top/ta/18[/url]来解决该问题!")
            time.sleep(0.5)
            # 给出几颗星,这里默认给出的是五颗星(xpath定位比css定位好使,有时候css定位不行但是xpath定位却可以,但是xpath可能会有变化,首选css定位,神奇)
            browser.find_element_by_css_selector("#csdn_dl_commentbox>li[class='stats'] :last-child").click()
            #browser.find_element_by_xpath("/html/body/div[5]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[1]/ul/li[2]/i[5]").click()
            time.sleep(0.5)
            # 点击发表评论
            browser.find_element_by_css_selector(".comm_btn").click()
            #browser.find_element_by_xpath("/html/body/div[6]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/button").click()
            time.sleep(0.5)
            # 关闭打开的标签页
            browser.execute_script("window.close()")
            # 返回原来的tab标签页中
            browser.switch_to.window(browser.window_handles[0])
        except:
            browser.execute_script("window.close()")

参考:

selenium+webdriver实现自动化登陆并评论csdn下载过的资源

selenium(二)查找定位目标 ID XPATH CSS 操作目标

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnPl.py

from selenium import webdriver
import time

# browser=webdriver.Chrome()#用google会报错,暂时不知道为什么
browser = webdriver.Firefox()
browser.get('https://passport.csdn.net/account/login')

# 转到用户名密码登陆,这里是个难点,卡了我好久,后来在stackoverflow上看到这样的解决方案,试了一下,果然灵
aElements = browser.find_elements_by_tag_name("a")
for name in aElements:
    if (name.get_attribute("href") is not None and "javascript:void" in name.get_attribute("href")):
        print("IM IN HUR")
        name.click()
        break

time.sleep(1)
browser.find_element_by_id('username').send_keys('dfjjfxyl')
# time.sleep(1)
browser.find_element_by_id('password').send_keys('Wylc1234567')
# time.sleep(1)
browser.find_element_by_class_name('logging').click()

print("logging success!")
time.sleep(2)
# print (browser.page_source)
# 转到的下载页面
browser.get('https://download.csdn.net/my/downloads')
# 获取我下载过的内容的评价链接
time.sleep(1)
# 获取总的页数
lastpage = browser.find_element_by_link_text("尾页").get_attribute('href')
# print (lastpage)
totlapage = int(lastpage.split('/')[-1])
print(lastpage.split('/')[-1])
for i in range(2, totlapage + 1):
    # 构造下载链接
    url1 = 'https://download.csdn.net/my/downloads/' + str(i)
    # 打开每一页
    browser.get(url1)
    time.sleep(1)
    # 获取评论链接
    urlc = browser.find_elements_by_link_text("立即评价")
    for comment_link_per_page in urlc:
        # 转到评论链接
        try:
            print(comment_link_per_page.get_attribute('href'))
            commurl = comment_link_per_page.get_attribute('href')
            # 打开新的标签页
            browser.execute_script("window.open()")
            print(browser.window_handles)
            # 切换到新的标签页中
            browser.switch_to.window(browser.window_handles[1])
            # 打开评论链接
            browser.get(commurl)
            time.sleep(1)
            #点击评论填写框触发样式
            browser.find_element_by_id("cc_body").click()
            time.sleep(1)
            # 输入评论内容
            browser.find_element_by_id('cc_body').send_keys("非常感谢作者分享,还可以参考[url=https://www.songbin.top/ta/18]https://www.songbin.top/ta/18[/url]来解决该问题!")
            time.sleep(1)
            # 给出几颗星,这里默认给出的是五颗星(xpath定位比css定位好使,有时候css定位不行但是xpath定位却可以,但是xpath可能会有变化,首选css定位,神奇)
            browser.find_element_by_css_selector("#csdn_dl_commentbox>li[class='stats'] :last-child").click()
            #browser.find_element_by_xpath("/html/body/div[5]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[1]/ul/li[2]/i[5]").click()
            time.sleep(1)
            # 点击发表评论
            browser.find_element_by_css_selector(".comm_btn").click()
            #browser.find_element_by_xpath("/html/body/div[6]/div[2]/div[1]/div[2]/div/div[2]/div[2]/div[2]/button").click()
            time.sleep(1)
            # 关闭打开的标签页
            browser.execute_script("window.close()")
            # 返回原来的tab标签页中
            browser.switch_to.window(browser.window_handles[0])
        except:
                #当出现异常时忽略进行下一个评论
                browser.execute_script("window.close()")
                browser.switch_to.window(browser.window_handles[0])
                pass
                continue
            #browser.execute_script("window.close()")
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: