爬虫 selenium的使用
from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys import time web = Chrome() web.get("http://lagou.com") # 找到某个元素. 点击它 el = web.find_element_by_xpath('//*[@id="changeCityBox"]/ul/li[1]/a') el.click() # 点击事件 time.sleep(1) # 让浏览器缓一会儿 # 找到输入框. 输入python => 输入回车/点击搜索按钮 web.find_element_by_xpath('//*[@id="search_input"]').send_keys("python", Keys.ENTER) time.sleep(1) # 查找存放数据的位置. 进行数据提取 # 找到页面中存放数据的所有的li li_list = web.find_elements_by_xpath('//*[@id="s_position_list"]/ul/li') for li in li_list: job_name = li.find_element_by_tag_name("h3").text job_price = li.find_element_by_xpath("./div/div/div[2]/div/span").text company_name = li.find_element_by_xpath('./div/div[2]/div/a').text print(company_name, job_name, job_price)
窗口的切换
from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys import time web = Chrome() # web.get("http://lagou.com") # # web.find_element_by_xpath('//*[@id="cboxClose"]').click() # # time.sleep(1) # # web.find_element_by_xpath('//*[@id="search_input"]').send_keys("python", Keys.ENTER) # # time.sleep(1) # # web.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[1]/div[1]/div[1]/div[1]/a/h3').click() # # # 如何进入到进窗口中进行提取 # # 注意, 在selenium的眼中. 新窗口默认是不切换过来的. # web.switch_to.window(web.window_handles[-1]) # # # 在新窗口中提取内容 # job_detail = web.find_element_by_xpath('//*[@id="job_detail"]/dd[2]/div').text # print(job_detail) # # # 关掉子窗口 # web.close() # # 变更selenium的窗口视角. 回到原来的窗口中 # web.switch_to.window(web.window_handles[0]) # print(web.find_element_by_xpath('//*[@id="s_position_list"]/ul/li[1]/div[1]/div[1]/div[1]/a/h3').text) # 如果页面中遇到了 iframe如何处理 web.get("https://www.91kanju.com/vod-play/541-2-1.html") # 处理iframe的话. 必须先拿到iframe. 然后切换视角到iframe . 再然后才可以拿数据 iframe = web.find_element_by_xpath('//*[@id="player_iframe"]') web.switch_to.frame(iframe) # 切换到iframe # web.switch_to.default_content() # 切换回原页面 tx = web.find_element_by_xpath('//*[@id="main"]/h3[1]').text print(tx)
无头浏览器
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.select import Select import time # 准备好参数配置 opt = Options() opt.add_argument("--headless") opt.add_argument("--disbale-gpu") web = Chrome(options=opt) # 把参数配置设置到浏览器中 web.get("https://www.endata.com.cn/BoxOffice/BO/Year/index.html") time.sleep(2) # # 定位到下拉列表 # sel_el = web.find_element_by_xpath('//*[@id="OptionDate"]') # # 对元素进行包装, 包装成下拉菜单 # sel = Select(sel_el) # # 让浏览器进行调整选项 # for i in range(len(sel.options)): # i就是每一个下拉框选项的索引位置 # sel.select_by_index(i) # 按照索引进行切换 # time.sleep(2) # table = web.find_element_by_xpath('//*[@id="TableList"]/table') # print(table.text) # 打印所有文本信息 # print("===================================") # # print("运行完毕. ") # web.close() # 如何拿到页面代码Elements(经过数据加载以及js执行之后的结果的html内容) print(web.page_source)
超级鹰使用案例
from selenium.webdriver import Chrome from chaojiying import Chaojiying_Client import time web = Chrome() web.get("http://www.chaojiying.com/user/login/") # 处理验证码 img = web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/div/img').screenshot_as_png chaojiying = Chaojiying_Client('18614075987', '6035945', '914467') dic = chaojiying.PostPic(img, 1902) verify_code = dic['pic_str'] # 向页面中填入用户名, 密码, 验证码 web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys("18614075987") web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys("6035945") web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input').send_keys(verify_code) time.sleep(5) # 点击登录 web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()
12306验证码使用案例
from selenium.webdriver import Chrome from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.chrome.options import Options from chaojiying import Chaojiying_Client import time # 初始化超级鹰 chaojiying = Chaojiying_Client('18614075987', '6035945', '914467') # 如果你的程序被识别到了怎么办? # 1.chrome的版本号如果小于88 在你启动浏览器的时候(此时没有加载任何网页内容), 向页面嵌入js代码. 去掉webdriver # web = Chrome() # # web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { # "source": """ # navigator.webdriver = undefined # Object.defineProperty(navigator, 'webdriver', { # get: () => undefined # }) # """ # }) # web.get(xxxxxxx) # 2.chrome的版本大于等于88 option = Options() # option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_argument('--disable-blink-features=AutomationControlled') web = Chrome(options=option) web.get("https://kyfw.12306.cn/otn/resources/login.html") time.sleep(2) web.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a').click() time.sleep(3) # 先处理验证码 verify_img_element = web.find_element_by_xpath('//*[@id="J-loginImg"]') # 用超级鹰去识别验证码 dic = chaojiying.PostPic(verify_img_element.screenshot_as_png, 9004) result = dic['pic_str'] # x1,y1|x2,y2|x3,y3 rs_list = result.split("|") for rs in rs_list: # x1,y1 p_temp = rs.split(",") x = int(p_temp[0]) y = int(p_temp[1]) # 要让鼠标移动到某一个位置. 然后进行点击 # 醒了 -> 掀开被子 -> 坐起来 -> 穿鞋子 -> 穿衣服 -> 开始执行动作 ActionChains(web).move_to_element_with_offset(verify_img_element, x, y).click().perform() time.sleep(1) # 输入用户名和密码 web.find_element_by_xpath('//*[@id="J-userName"]').send_keys("123456789") web.find_element_by_xpath('//*[@id="J-password"]').send_keys("12346789") # 点击登录 web.find_element_by_xpath('//*[@id="J-login"]').click() time.sleep(5) # 拖拽 btn = web.find_element_by_xpath('//*[@id="nc_1_n1z"]') ActionChains(web).drag_and_drop_by_offset(btn, 300, 0).perform()
非特殊说明,本文版权归原作者所有,转载请注明出处
评论列表
发表评论