美文网首页
2018.10.8 selenium 动态加载

2018.10.8 selenium 动态加载

作者: L湖畔老人 | 来源:发表于2018-10-08 13:45 被阅读0次

-selenium 是一套完整的web应用程序测试系统,可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

from selenium import webdriver

browser=webdriver.Chrome()

不想显示界面可以用 phantomjs

页面访问:browser.get(url)

获取网页源码:browser.page_source

一般情况遇到的动作:

输入文字:driver=browser.find_element_by_id('q')

driver.send_keys("macbook")

按钮:

driver.click()

执行 JavaScript:

交互动作:

-将动作附加到动作链中串行执行

from selenium import webdriver

from selenium.webdriver import ActionChains

browser=webdriver.Chrome()

url=""

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()

执行javascript

这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,

下面的例子是通过登录知乎然后通过js翻到页面底部,并弹框提示

from selenium import webdriver

browser = webdriver.Chrome()

browser.get("http://www.zhihu.com/explore")

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')

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

获取元素属性

get_attribute("class")

对于等待:

1)外界作用:time模块中的 time.sleep()

2)使用webdriver的等待机制:

1.隐式等待

到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,

如果没有需要等待的时候就已经加载完毕就会立即执行

利用的是

browser.implicitly_wait(10)

2.显示等待

指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,

如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回

利用的是:

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

这三个模块的导入

然后一般这么写:

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')))

切记判断条件:

常用的判断条件:

title_is 标题是某内容

title_contains 标题包含某内容

presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')

visibility_of_element_located 元素可见,传入定位元组

visibility_of 可见,传入元素对象

presence_of_all_elements_located 所有元素加载出

text_to_be_present_in_element 某个元素文本包含某文字

text_to_be_present_in_element_value 某个元素值包含某文字

frame_to_be_available_and_switch_to_it frame加载并切换

invisibility_of_element_located 元素不可见

element_to_be_clickable 元素可点击

staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新

element_to_be_selected 元素可选择,传元素对象

element_located_to_be_selected 元素可选择,传入定位元组

element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False

element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False

alert_is_present 是否出现Alert

-浏览器的操作

browser.forward()

browser.back()

- cookie

browser.get_cookies()

browser.add_cookie({字典})

browser.delete_all_cookies()

-选项卡管理

通过执行js命令实现新开选项卡window.open()

不同的选项卡是存在列表里browser.window_handles

通过browser.window_handles[0]就可以操作第一个选项卡

browser.execute_script('window.open()')print(browser.window_handles)

browser.switch_to_window(browser.window_handles[1])

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

time.sleep(1)

browser.switch_to_window(browser.window_handles[0])

browser.get('https://python.org')

-异常处理

fromselenium.common.exceptionsimport TimeoutException, NoSuchElementException

try:

    browser.get('https://www.baidu.com')except TimeoutException:

    print('Time Out')try:

    browser.find_element_by_id('hello')except NoSuchElementException:

    print('No Element')finally:

    browser.close()

相关文章

网友评论

      本文标题:2018.10.8 selenium 动态加载

      本文链接:https://www.haomeiwen.com/subject/kepdaftx.html