selenium

from selenium.webdriver import Chrome

导入自定义配置模块

from selenium.webdriver.chrome.options import Options

创建配置对象

chrome_options = Options()

chrome_options.add_argument('window-size=1920x3000')#指定浏览器分辨率

chrome_options.add_argument('--disable--gpu')#谷歌文档提高需要使用这个属性来规避bug

chrome_options.add_argument('--hide-scrollbars')隐藏滚动条,应对一些特殊界面

chrome_options.add_argument('blink-settings=imagesEnabled=false')不加载图片,可以提升速度

chrome_options.add_argument('--headless')浏览器不再提供可视化界面

linux下如果系统无界面不加这条便会启动失败

chrome_options.add_exeprimental_option('excludeSwitches',['enable-automation'])取消浏览器驱动提示

如果将驱动的路径设置到环境变量中,可以不用传参数options表示配置项

driver=Chrome(r''D:\jerry\spiderDay3\selenium模块\chromedriver.exe",options=chrome_options)

driver.get("http://www.baidu.com")访问百度

text = driver.page_source 获取页面源代码可以从中提取数据

driver.close()关闭浏览器

selenium提供了很多用于解析数据的函数

tag = driver.find_element_by_class_name("index-logo-src")

tag = driver.find_element_by_css_selector(".index-logo-src")

标签相关内容

tag.text文本 tag.parent得到的是driver对象不是父标签

tag.get_attrbute("src")

tag.tag_name

一些特别的查找方式

根据链接的文本查找

tag  = driver.find_element_by_link_text("学术")#文本完全匹配

tag=driver.find_element_by_partial_link_text("数")文本部分匹配

tag = driver.find_element_by_name("tj_trjao123") 查找第一个name属性为tj_trjao123的标签

tag=driver.find_element_by_tag_name("body")查找标签名称等于body的标签

print(tag.tag_name,tag.getattrbute(""href"),tag.text)

所有方法都能带s,用来查找所有匹配的标签,返回值类型为列表

嵌套查找

tag = driver.find_element_by_name("sb")

tag2= tag.find_element_by_tag_name("a")

与显示有关的属性

tag = driver.find_element_by_class_name("index-logo-src")

print(tag.location)打印标签的布局为字典格式如{"x":123,"y":345}

print(tag.size)不知道

等待元素加载

from selenium.wendriver import Chrome

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_contions as EC

from selenium.webdriver.common.by import By

当腰查找的元素不存在时,汇过一会再查找一次(轮询)知道找到为止,一旦超过10秒就会报错

driver.implicity_wait(10)隐士等待

key_input=driver.find_element(By.ID,"kw")等同于下面的

key_input=driver.find_element_by_id("kw") #找到输入框

key_input.send_keys("基佬")  #向输入框发送数据

key_input.send_keys(Keys.ENTER) 执行回车键

显式等待 明确的等待某一个元素 满足某个条件传入要等待的driver和等待超时时间,等待页面出现了一个id为content_left的元素位为止,最长等10秒否则报错

WebDriverWait(driver,10).until(EC.presence_of_element_located(By.ID,"content_left"))

获取搜索结果 如果直接获取元素,可能因为页面没有加载完毕,导致获取失败

div = driver.find_element_by_id("conten_left")

清空输入框:找到指定输入框

key_input=driver.find_element_by_id("kw")

key_input.clear()$清空输入框

动作练

指的是一系列动作的集合,例如滑动验证1.点击并按住2.移动鼠标3.移到指定位置释放

from selenium.wendriver import Chrome

from selenium.webdriver import ActionChains

driver=Chrome()

driver.get(url)

driver.implicitly_wait(5)

切换frame(指定找到当前frame的内容,如果需要找到其他frame的标签,需要切换框架)

driver.switch_to.frame("imframeResult")

#获取需要拖拽的标签

tag=driver.find_element_by_id("draggable")

#获取目标位置的标签

tag2 = driver.find_element_by_id("froppable")

确定移动距离

dis=tag2.location.get('x')-tag.location.get('x')

创建一个动作对象

asc=ActionChains(driver)

asc.click_and_hold(tag).perform()#点击并按住指定标签perform表示执行该动作

asc.move_to_element(tag2).perform()移动到指定标签

asc.release().perform()松手

由于上述动作实在太快可能被认定为机器人

线性移动

asc=ActionChains(driver)

asc.click_and_hold(tag).perform()

#循环逐渐移动

while tag.location['x'] < tag2.location[''x']:

  ActionChains(driver).move_by_offset(1,0).perform() #需要新创建一个对象原因不知道

asc.release().perform()

如果需要访问当前frame之上(父辈的内容)需要回到父级frame

driver.switch_to.parent_frame()

driver.find_element_by_id("textareaCode")

执行js代码

driver = Chrome()

driver.get("fhuiewuhf123")

driver.execute_script("alert("sb")")

导航(前进后退)


# driver.get("https://www.baidu.com")
# driver.get("https://www.qq.com")
# driver.get("https://www.sina.com")
# driver.get("https://www.4399.com")
#
#
# driver.back()# 后退
# driver.forward() # 前进

切换选项卡

driver.execute_script("window.open()")

print(driver.window_handles)#获取所有windows对象

driver.switch_to.window(driver.window_handles[1])#根据索引切换

 当遇到懒加载时,可以执行js代码,滑动页面,使用selenium模块的显示等待,确保数据准确,以及准确获取标签

转载于:https://www.cnblogs.com/suncunxu/p/10698216.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值