Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。接下来我们将学习如何使用selenium。
selenium提取数据 1.driver对象的常用属性和方法 1.driver.page_source() 当前标签页浏览器渲染之后的网页源代码 2.driver.current_url() 当前标签页的url 3.driver.close() 关闭当前标签页 4.driver.quit() 关闭浏览器 5.driver.forward() 页面前进 6.driver.back() 页面后退 7.driver.screen_shot(img_name) 页面截图 2.元素定位方法 1.driver.find_element_by_xpath() 2.driver.find_element_by_css_selector() 3.driver.find_element_by_name() 4.driver.find_element_by_class_name() 5.driver.find_element_by_id() 6.driver.find_element_by_link_text() 7.driver.find_element_by_partial_link_text() 8.driver.find_element_by_tag_name() element -> elements 定位符合条件的元素,并返回列表 3.标签对象属性值和文本值获取 文本值:.text 属性值:.get_attribute('href') 4.元素操作函数 点击: click() 发送值:send_keys() 清除: clear() 5.其他使用方法 1.标签页的切换 获取所有标签页句柄 current_windows = driver.window_handles 切换标签 driver.switch_to.window(current_windows[0]) 2.iframe的切换 1.driver.switch_to.frame('id') 2.el_frame = driver.find_element_by_xpath('') driver.switch_to.frame(el_frame) 3.获取cookies值 driver.get_cookies() 4.执行js代码 滚动条的拖动 js = 'scrollTo(0, 500)' #0:x方向 driver.execute_script(js) 5.页面等待 强制等待:sleep() 隐式等待 :设置一个最大时间,超时报错 driver.implicitly_wait(10) (s) 显示等待 6.无界面模式 options = webdriver.ChromeOptions() options.add_argument("--headless") options.add_argument("--disable-gpu") driver = webdriver.Chrome(chrome_options = options) 7.代理ip options.add_argument("--proxy-server = http://202.20.16.82.9527") 8.更换user-agent options.add_argument("--user-agent=***")s
上面简单介绍了关于selenium的一些基本语法,下面我们将通过使用selenium模块爬取斗鱼网站作为实践:
import time
from selenium import webdriver
class Douyu(object):
def __init__(self):
self.url = 'https://www.douyu.com/directory/all'
self.driver = webdriver.Chrome()
def parse_data(self):
room_list = self.driver.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div')
data_list = []
for room in room_list:
temp = {}
temp['title'] = room.find_element_by_xpath('./a/div[2]/div[1]/h3').text
temp['type'] = room.find_element_by_xpath('./a/div[2]/div[1]/span').text
data_list.append(temp)
return data_list
def save_data(self, data_list):
for data in data_list:
print(data)
def run(self):
# url
# driver
# get
self.driver.get(self.url)
# 循环爬取
for i in range(2):
time.sleep(3)
# parse
data_list = self.parse_data()
# save
self.save_data(data_list)
# next
self.driver.execute_script('scrollTo(0, 100000)')
self.driver.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/div/ul/li[9]/span')[0].click()
print(i)
self.driver.close()
if __name__ == '__main__':
douyu = Douyu()
douyu.run()