动态渲染页面爬取--【2】

1、获取内容

通过a = find_element(By.ID, 'xxxx')找到节点之后,可通过

a.text  # 获取文本
a.get_attribute('?')  # 获取属性
a.location  # 获取位置 (例如:{'x': 734, 'y': 476})
a.tag_name  # 标签名
a.size  # 节点大小

2、切换Frame

browser.switch_to.frame('xxx')进入子Frame

browser.switch_to.parent_frame()返回父级Frame

3、延时等待

get()方法会在网页框架加载结束后结束运行,此时获取page_source可能不是完全加载的页面。如果有些网页有额外的Ajax请求,在网页源代码中不一定能够获取。这里就需要一些等待时间,确保节点都已经加载出来。

  • 隐式等待

    • 如果Selenium没有在DOM中找到节点,将继续等待设定的时间,超出时间后找不到节点,则抛出异常。
      • browser.implicitly_wait(10)
  • 显式等待

    • 比隐式条件要好,因为加载时间和网络因素有关会受到影响。

    • 指定要找的节点,指定一个最长等待时间,如果找到则返回找到的节点,如果失败则抛出超时异常。

      from selenium import webdriver
      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()
      browser.get('https://www.taobao.com/')
      wait = WebDriverWait(browser, 10)  # 引入对象,指定最长等待时间
      
      # 调用until方法,传入等待条件 `expected_conditions`
      input_ = wait.until(EC.presence_of_element_located((By.ID, 'q')))  # 直到节点出现  
      button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))  # 这里换了条件,等待能够点击的时候。
      print(input_, button)
      
      等待条件含义
      EC.title_is标题是某内容
      EC.title_contains标题包含某内容
      EC.presence_of_element_located节点加载出来,传入定位元组,如:(By.ID, ‘p’)
      EC.visibility_of_element_located节点可见,传入定位于元组
      EC.visibility_of可见,传入节点对象
      EC.presence_of_all_elements_located所有节点都加载出来
      EC.text_to_be_present_in_element某节点文本包含某文字
      EC.text_to_be_present_in_element_value某节点值包含某文字
      EC.frame_to_be_available_and_switch_to_it加载并且切换
      EC.invisibility_of_element_located节点不可见
      EC.element_to_be_clickable节点可点击
      EC.staleness_of判断一个节点是否在DOM,可判断页面是否已经刷新
      EC.element_to_be_selected节点可选择,传节点对象
      EC.element_located_to_be_selected节点可选择,传入定位元组
      EC.element_selection_state_to_be传入节点对象以及状态,相等→True,else False
      EC.element_located_selection_state_to_be传入定位元组及状态,同上
      EC.alert_is_present是否出现警告

4、前进与后退

browser.back() browser.forward()

5、Cookies

Selenium方便对其操作

browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())  # 获取
browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})  # 添加
print(browser.get_cookies())
browser.delete_all_cookies()  # 清除
print(browser.get_cookies())

6、选项卡管理

browser.get('https://www.baidu.com')
browser.execute_script('window.open()')  # Js语句开启一个选项卡
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])  # 切换
browser.get('https://taobao.com')  # 在第二个选项卡打开
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])  # 切换
browser.get('https://python.org')  # 打开

7、异常处理

很熟悉的 try except

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JamePrin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值