Selenium之学习杂记(三)

通过Selenium访问Python官网

代码如下:

# 导入selenium库、time库
from selenium import webdriver
import time

# 启动浏览器,打开python官网
driver = webdriver.Chrome()
driver.get("https://www.python.org/")
# 停留2秒中
time.sleep(2)
# 退出
driver.quit()

通过JavaScript修改Python官网的标题

在这里插入图片描述

代码如下:

# 导入selenium库、time库
from selenium import webdriver
import time

# 启动浏览器,打开python官网
driver = webdriver.Chrome()
driver.get("https://www.python.org/")
# 修改标题
time.sleep(30) # 我这面打开官网比较慢,所以设置了这个时间
JS1 = "document.title='标题被篡改了';"
driver.execute_script(JS1)
# 弹窗标题
time.sleep(5)  # 我这面打开官网比较慢,所以设置了这个时间
JS2 = r"alert($(document).attr('title'));"
driver.execute_script(JS2)
# 退出
time.sleep(5)  # 我这面打开官网比较慢,所以设置了这个时间
driver.quit()

javascript的语法还是需要自行学习一下的。

在搜索框搜索

在Python官网的搜索框进行一次搜索。首先看一下搜索框的代码
在这里插入图片描述

# 导入selenium库、time库
from selenium import webdriver
import time

# 启动浏览器,打开python官网
driver = webdriver.Chrome()
driver.get("https://www.python.org/")
# 修改标题
time.sleep(5) # 我这面打开官网比较慢,所以设置了这个时间
JS1 = "document.title='标题被篡改了';"
driver.execute_script(JS1)
# 弹窗标题
time.sleep(5)  # 我这面打开官网比较慢,所以设置了这个时间
JS2 = r"alert($(document).attr('title'));"
driver.execute_script(JS2)

# 搜索
time.sleep(5)
driver.find_element_by_id("id-search-field").send_keys("pycon")
driver.find_element_by_id("submit").click()
# 退出
time.sleep(5)  # 我这面打开官网比较慢,所以设置了这个时间
driver.quit()

获取latest news部分

在这里插入图片描述
在这里插入图片描述
copy的结果:#content > div > section > form > ul > li:nth-child(1) > h3 > a

# 导入selenium库、time库
from selenium import webdriver
import time

# 启动浏览器,打开python官网
driver = webdriver.Chrome()
driver.get("https://www.python.org/")
# 搜索
time.sleep(1)
driver.find_element_by_id("id-search-field").send_keys("pycon")
driver.find_element_by_id("submit").click()

# 通过CSS样式查找
time.sleep(1)
driver.find_element_by_css_selector(r"#content > div > section > form > ul > li:nth-child(1) > h3 > a").click()
# 截图看是否正确点击过去了
driver.save_screenshot("save.png")
# 退出
driver.quit()

Selenium的等待

使用等待是一个好习惯,它可以避免你因为页面尚未加载完就执行下一步出现的错误。Selenium的等待有很多种方式,除了在之前经常用到的time.sleep()以外,Selenium项目自身还提供了两种等待方式,分别是隐式等待和显式等待。

time.sleep()这种等待也叫作强制等待。换句话说,就是不管浏览器中的页面是否加载完,我们都要等待特定的时长。比如,作者和读者相约9:00到公园玩,作者提前到了公园门口,但读者必须到9:00才出发,所以即便作者已经到了,他们还是要等到某个时刻再进公园。

隐式等待则和强制等待有很大的不同。同样借用上面的比喻,如果作者8:50到公园门口,只等读者10分钟。如果到了9:00读者还没有来,作者就先自己进去了。如果读者在8:50到9:00的时间内到了,那么作者和读者就立刻一起进去。

显式等待更加灵活,还以刚才的比喻来说明,作者在公园门口等待读者,读者因为路上堵车,无法准时到达,于是给作者打了一个电话,作者就可以自己先进去了。

显式等待和隐式等待最大的区别在于,显式等待判断的并不是读者是否到达目的地,而是读者是否给出了某个信号。用在网页加载上也是一样的,隐式等待判断网页是否完全加载完,但可能在某些网站上某个JavaScript脚本的加载速度特别慢,而这个JavaScript脚本可能只是某个限制脚本,并不影响页面的浏览,可是这时候仍需要等到全部页面加载完才能执行下一步的操作。而显式等待只需要判断某个特定的元素是否加载出来即可。

强制等待的代码

# 导入库
from selenium import webdriver
import time

# 启动浏览器,并打开网页
driver = webdriver.Chrome()
driver.get("https://www.csdn.net/")
# 输出当前页面地址
time.sleep(5)
print(driver.find_element_by_link_text('首页').get_attribute('href'))
# 退出
driver.quit()

使用强制等待,不管浏览器是否加载完,程序都会等待2s,然后继续执行后面的代码,这种方法很适合在调试的时候使用。虽然强制等待在编程中使用很方便,但在运行的时候过于死板,十分影响程序的执行速度。

使用隐式等待的代码

# 导入库
from selenium import webdriver
import time

# 启动浏览器,并打开网页
driver = webdriver.Chrome()
driver.implicitly_wait(30) #隐式等等,最长30秒
driver.get("https://www.csdn.net/")
# 输出当前页面地址
print(driver.find_element_by_link_text('首页').get_attribute('href'))
# 退出
driver.quit()

特别说明一下,隐式等待设置一次,就会在整个程序运行过程中都起作用。所以只需设置一次隐式等待,不需要在整个程序中设置多次。

显式等待的例子
需要多导入以下库。
●selenium.webdriver.support.wait。
●selenium.webdriver.support。
●selenium.webdriver.common.by。

# 导入库
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By

# 启动浏览器,设置隐式等待,并打开网页
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.csdn.net/")
# 使用显示等待
try:
    WebDriverWait(driver, 20, 0.5).until(expected_conditions.presence_of_element_located((By.LINK_TEXT, u'首页')))
finally:
    print(driver.find_element_by_link_text('首页').get_attribute('href'))
# 退出
driver.quit()

在这里插入图片描述
后面一部分是until()语句。除了until()之外,还可以使用until_not()。这两个语句的使用方法都差不多。语法格式都是(method, message=""),message返回的是返回结果为0(即失败)后弹出的信息。不同的是until检查的条件是直到返回值为True,until_not检查的条件直到返回值为False。在代码的中间用到了EC(Expected Condition)。EC的方法其实不止这一种,还有许多,用法都和上面的类似。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值