selenium的使用

下载相应浏览器驱动

放在python的根目录下

初始化

1
2
3
4
5
6
7
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()#驱动谷歌浏览器
wait = WebDriverWait(browser,10)#等待时间

需下载谷歌浏览器驱动chromedriver。注意不同版本浏览器需下载相应的驱动。
将下载的chromedriver解压后移动到/usr/local/bin

输入文本及点击按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def search():
try:
browser.get('https://www.taobao.com/')
input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR,'#q'))
)
submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm > div.search-button > button')))
input.send_keys('美食')#输入文字
submit.click()#点击按钮
total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total')))
get_products()
return total.text
except TimeoutException:
return search()#发生错误再执行一遍

利用pyquery解析网页

1
2
3
4
5
6
7
8
9
10
11
12
from pyquery import PyQuery as pq
def get_products():
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item')))
html = browser.page_source#获取网页源代码
doc = pq(html)
items = doc('#mainsrp-itemlist .items .item').items()
for item in items:
product = {
'image':'https:'+item.find('.pic .img').attr('src'),
'title':item.find('.title').text()
}
print(product)

模拟手机点击

1
TouchActions(browser).tap(return_name).perform()#模拟手机点击tap里为获取元素,broswer:浏览器实例

进行翻页操作

1
browser.execute_script("window.scrollBy(0, 10000)")

使用jieba统计词频

1
seg_list = jieba.lcut(txt)#txt:文本输入,返回list

对字典排序

1
result = sorted(seg_dic.items(),key=lambda e:e[1],reverse=True)[:15]#True降序排列

对下拉列表进行选择

select类型:

1
2
3
4
5
6
# 通过index进行选择
Select(driver.find_element_by_id("gender")).select_by_index(1)
# 通过value进行选择
Select(driver.find_element_by_id("gender")).select_by_value("2")
# 通过选项文字进行选择
Select(driver.find_element_by_id("gender")).select_by_visible_text("Male")

非select类型:

  • 1、若列表隐藏则先模拟点击输入框
  • 2、然后通过CSS_SELECTOR选择所在的li下的span
  • 3、通过文字判断是哪个li
    1
    2
    3
    4
    #全部文字
    browser.find_element_by_xpath("//*[text()='IPC']").click()
    #部分文字
    browser.find_element_by_xpath("//*[contains(text(),'花呗')]").click()

常见问题

定位页面元素

有id使用id定位,其次可以一般可以用xpath定位所有元素。

打开一个新链接(窗口)时,页面资源没有变化。

当打开一个新页面时,page_source还是之前页面的,会导致一直定位不到当前页面的元素。
解决办法:切换到当前页面代码如下:

1
2
handle = broswer.window_handles;
broswer.switch_to.window(handle[-1])#切换到当前窗口

调整页面等待时间

broswer.set_page_load_timeout(7)#加载等待时间
超出时间未加载完页面可捕获异常进一步处理

定位iframe标签里边元素 (html里面嵌html)

如果直接用元素id或xpath之类定位往往会报元素不可见或者超时,解决办法为:
将页面资源切换到iframe里面

1
broswer.switch_to.frame("contentframe")

用完后切回

1
broswer.switch_to.default_content()


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com

文章标题:selenium的使用

本文作者:子非鱼

发布时间:2018-11-04, 11:19:29

最后更新:2018-10-07, 09:05:48

原始链接:https://Wangsr.cn/2018/11/04/2018-2018-03-01-selenium的使用/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏