python动态图如何渲染到网页_python爬虫之动态渲染页面抓取-(Selenium)的使用

以淘宝为例:

1435484-20200723231143812-1480116856.png

代码:

from selenium importwebdriver

browser=webdriver.Chrome()

browser.get('https://www.taobao.com')#找搜索框--id方式

input_first = browser.find_element_by_id('q')#找搜索框--css方式

input_second = browser.find_element_by_css_selector('#q')#找搜索框--xpath方式

input_third = browser.find_element_by_xpath('//*[@id="q"]')print(input_first)print(input_second)print(input_third)

browser.close()

结果:

多个节点的情况

find_element() 只能查找目标网页中的一个,要查找多个要用find_elements()

代码

from selenium importwebdriver

browser=webdriver.Chrome()

browser.get('https://www.taobao.com')

lis= browser.find_elements_by_css_selector('.service-bd li')print(lis)

browser.close()

结果:

[, , , , , , , , , , , , , , , ]

5、节点交互

输入文字:send_keys()

清空文字:clear()

点击按钮:click()

from selenium importwebdriverimporttime

browser=webdriver.Chrome()

browser.get('https://www.taobao.com')

input= browser.find_element_by_id('q')#输入文字‘iPhone’

input.send_keys('iphone')#睡1秒

time.sleep(1)#清空

input.clear()#输入文字‘iPad’

input.send_keys('ipad')#找到class='btn-search'的按钮

button = browser.find_element_by_class_name('btn-search')#点击它

button.click()

结果:

淘宝要登录,这里无法返回结果

6、动作链

执行鼠标拖曳 、 键盘按键等动作

from selenium importwebdriverfrom selenium.webdriver importActionChains

browser=webdriver.Chrome()

url= 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)

browser.switch_to.frame('iframeResult')

source= browser.find_element_by_css_selector('#draggable')

target= browser.find_element_by_css_selector('#droppable')

actions=ActionChains(browser)

actions.drag_and_drop(source, target)

actions.perform()

结果

1435484-20200723233945728-287041963.png

7、执行javascript

对于没有提供的操作,如下拉进度条,可以使用excute_script()方法实现。

from selenium importwebdriver

browser=webdriver.Chrome()

browser.get('https://www.zhihu.com/explore')

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')#下拉到底部后,谈出alert提示框

browser.execute_script('alert("To Bottom")')

8、获取节点信息

page_source 属性可以获取网页的源代码,然后通过Beautiful soup pyquery进行信息提取

也可以使用selenium自带的获取属性、文本等

· 获取属性

get_attribute()方法来获取节点的属性

from selenium importwebdriverfrom selenium.webdriver importActionChains

browser=webdriver.Chrome()

url= 'https://www.zhihu.com/explore'browser.get(url)#输出搜索框内容

logo = browser.find_element_by_id('Popover1-toggle')print(logo)#输出class="Input"的值

print(logo.get_attribute('class'))

结果:

Input

· 获取文本值

text()

·获取 id、位置、 标签名和大小

id 属性可以获取节点 id, location 属性可以获取该节点在页面中的相对位置, tag_name 属性可以获取标签名称, 就是宽高

9、延时等待

get()方法会在网页框架加载结束后结束执行,此时如果获取page_source,可能并不是浏览器完全加载完全的页面,如果有页面有额外的Ajax请求,在网页源代码中并不一定能成功获取,所以需要延时等待一下。

·隐式等待

from selenium importwebdriver

browser=webdriver.Chrome()#隐式等待,默认等待0秒,找不到继续等一会在找,容易受到页面加载时间的影响

browser.implicitly_wait(10)

browser.get('https://www.zhihu.com/explore')

input= browser.find_element_by_class_name('Input')print(input)

结果:

·显式等待

指定一个最长等待时间

from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.support.ui importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as EC

browser=webdriver.Chrome()

browser.get('https://www.taobao.com/')

wait= WebDriverWait(browser, 10)

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)

结果:

1435484-20200727232222574-1753538717.png

10、前进和后退

forword() 前进下一个页面,back() 返回前一个页面

11、Cookies

get_cookies() 方法获取所有的 Cookie

add_cookies() 方法添加cookies

delete_all_cookies()方法删除所有的 Cookies

1435484-20200727232438207-166454805.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值