selenium 使用进阶(一)

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
import csv
import os
import re


class ZiDongHuaCeShi:
    def __init__(self):
        self.driver = webdriver.Chrome()  # 实例化一个对象
        self.driver.maximize_window()  # 窗口最大化
        '''
        我不会告诉你这样做会有问题的
        '''

    """
    1. 定位元素 API 一旦执行失败(即查找不到), 就会抛出异常 
    因此必须使用 try: .. except: ... 机制避免错误的行为影响程序继续进行
    2. 可变时长等待,类似于数据库中的可变长字符类型(varchar),当元素出现时就定位该元素,而不是采用sleep()这种定时等待
    3. 将两者结合起来
    """

    def find_elements(self, key, value):
        elements = []
        try:
            if key == 'xpath':
                elements = WebDriverWait(self.driver, 25).until(
                    EC.presence_of_all_elements_located((By.XPATH, value)))
            elif key == 'class_name':
                elements = WebDriverWait(self.driver, 25).until(
                    EC.presence_of_all_elements_located((By.CLASS_NAME, value)))
            elif key == 'id':
                elements = WebDriverWait(self.driver, 25).until(
                    EC.presence_of_all_elements_located((By.ID, value)))
            elif key == 'name':
                elements = WebDriverWait(self.driver, 25).until(
                    EC.presence_of_all_elements_located((By.NAME, value)))

        except Exception as e:
            print(e)

        return elements

    def do_something(self):
        self.driver.get("https://www.baidu.com/")
        try:
            self.find_elements(key='xpath', value="//input[@id='kw']")[0].send_keys("python Selenium")
        except Exception as e:
            print(e)
        try:
            self.find_elements('xpath', "//input[@id='su']")[0].click()
        except Exception as e:
            print(e)
        sleep(10)
        self.driver.quit()

if __name__ == "__main__":
	KaiShi = ZiDongHuaCeShi()
	KaiShi.do_something()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值