selenium实例

1. 模拟登陆

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


class Douban():
    def __init__(self):
        self.url = "https://www.douban.com/"
        path = r"C:\Users\yangzaigang\Downloads\chromedriver_win32\chromedriver.exe"
        self.driver = webdriver.Chrome(path)

    def log_in(self):
        self.driver.get(self.url)
        time.sleep(3)  # 睡3分钟,等待页面加载
        self.driver.save_screenshot("0.jpg")
        # 输入账号
        self.driver.find_element_by_xpath('//*[@id="form_email"]').send_keys("[email protected]")
        # 输入密码
        self.driver.find_element_by_xpath('//*[@id="form_password"]').send_keys("xxxx")
        # 点击登陆
        self.driver.find_element_by_class_name("bn-submit").click()
        time.sleep(2)
        self.driver.save_screenshot("douban.jpg")
        # 输出登陆之后的cookies
        print(self.driver.get_cookies())

    def __del__(self):
        '''调用内建的稀构方法,在程序退出的时候自动调用
        类似的还可以在文件打开的时候调用close,数据库链接的断开
        '''
        self.driver.quit()


if __name__ == "__main__":
    douban = Douban()  # 实例化
    douban.log_in()  # 之后调用登陆方法

2. 执行JavaScript

from selenium import webdriver

# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
path = r"C:\Users\yangzaigang\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.baidu.com/")

# 给搜索输入框标红的javascript脚本
js = "var q=document.getElementById(\"kw\");q.style.border=\"2px solid red\";"

# 调用给搜索输入框标红js脚本
driver.execute_script(js)

#查看页面快照
driver.save_screenshot("redbaidu.png")

#js隐藏元素,将获取的图片元素隐藏
img = driver.find_element_by_xpath("//*[@id='lg']/img")
driver.execute_script('$(arguments[0]).fadeOut()',img)

# 向下滚动到页面底部
driver.execute_script("$('.scroll_top').click(function(){$('html,body').animate({scrollTop: '0px'}, 800);});")

#查看页面快照
driver.save_screenshot("nullbaidu.png")

driver.quit()

3. 动态页面模拟点击

# 爬取斗鱼直播平台的所有房间信息
from selenium import webdriver
import json
import time
class Douyu:
    # 1.发送首页的请求
    def __init__(self):
        self.driver = webdriver.PhantomJS()
        self.driver.get("https://www.douyu.com/directory/all") #请求首页
 
    #获取没页面内容
    def get_content(self):
        time.sleep(3) #每次发送完请求等待三秒,等待页面加载完成
        li_list = self.driver.find_elements_by_xpath('//ul[@id="live-list-contentbox"]/li')
        contents = []
        for i in li_list: #遍历房间列表
            item = {}
            item["img"] = i.find_element_by_xpath("./a//img").get_attribute("src") #获取房间图片
            item["title"] = i.find_element_by_xpath("./a").get_attribute("title") #获取房间名字
            item["category"] = i.find_element_by_xpath("./a/div[@class='mes']/div/span").text #获取房间分类
            item["name"] = i.find_element_by_xpath("./a/div[@class='mes']/p/span[1]").text #获取主播名字
            item["watch_num"] = i.find_element_by_xpath("./a/div[@class='mes']/p/span[2]").text #获取观看人数
            print(item)
            contents.append(item)
        return contents
    #保存本地
    def save_content(self,contents):
        f = open("douyu.txt","a")
        for content in contents:
            json.dump(content,f,ensure_ascii=False,indent=2)
            f.write("\n")
        f.close()
 
    def run(self):
        #1.发送首页的请求
        #2.获取第一页的信息
        contents = self.get_content()
            #保存内容
        self.save_content(contents)
        #3.循环  点击下一页按钮,知道下一页对应的class名字不再是"shark-pager-next"
        while self.driver.find_element_by_class_name("shark-pager-next"): #判断有没有下一页
            #点击下一页的按钮
            self.driver.find_element_by_class_name("shark-pager-next").click() #
            # 4.继续获取下一页的内容
            contents = self.get_content()
            #4.1.保存内容
            self.save_content(contents)
 
if __name__ == "__main__":
    douyu = Douyu()
    douyu.run()

  

猜你喜欢

转载自www.cnblogs.com/yzg-14/p/12203716.html