Uso detallado de selenio, una herramienta para pruebas de aplicaciones web

Selenium se utiliza principalmente para pruebas automatizadas y es compatible con varios navegadores. El rastreador se utiliza principalmente para resolver problemas de representación de JavaScript.

Simule el navegador para cargar la página web, cuando las solicitudes, urllib no puede obtener el contenido de la página web normalmente

Uno, declara el objeto del navegador

Tenga en cuenta uno, el nombre del archivo Python o el nombre del paquete no debe llamarse selenio, lo que provocará un error de importación

1

2

3

from selenium import webdriver

#webdriver可以认为是浏览器的驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器,这里以Chrome为例

browser = webdriver.Chrome()

2. Visite la página y obtenga el html

1

2

3

4

5

from selenium import webdriver

browser = webdriver.Chrome()

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

print(browser.page_source)#browser.page_source是获取网页的全部html

browser.close()

Tres, encuentra elementos

Elemento único

1

2

3

4

5

6

7

8

from selenium import webdriver

browser = webdriver.Chrome()

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

input_first = browser.find_element_by_id('q')

input_second = browser.find_element_by_css_selector('#q')

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

print(input_first,input_second,input_third)

browser.close()

Métodos de búsqueda habituales

find_element_by_name

find_element_by_xpath

find_element_by_link_text

find_element_by_partial_link_text

find_element_by_tag_name

find_element_by_class_name

find_element_by_css_selector

También puede utilizar métodos generales

1

2

3

4

5

6

7

from selenium import webdriver

from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

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

input_first = browser.find_element(BY.ID,'q')#第一个参数传入名称,第二个传入具体的参数

print(input_first)

browser.close()

Elementos múltiples, elementos múltiples s

1

input_first = browser.find_elements_by_id('q')

 

Cuarto, palabras clave de entrada de operación de interacción de elementos en el cuadro de búsqueda para búsqueda automática

1

2

3

4

5

6

7

8

9

10

11

from selenium import webdriver

import time

browser = webdriver.Chrome()

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

input = browser.find_element_by_id('q')#找到搜索框

input.send_keys('iPhone')#传送入关键词

time.sleep(5)

input.clear()#清空搜索框

input.send_keys('男士内裤')

button = browser.find_element_by_class_name('btn-search')#找到搜索按钮

button.click()

Más operaciones: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement# puede tener atributos, capturas de pantalla, etc.

 

5. Acciones interactivas, impulsa el navegador para realizar acciones, simula acciones de arrastrar y soltar y adjuntar acciones a la cadena de acciones para la ejecución en serie.

1

2

3

4

5

6

7

8

9

10

11

from selenium import webdriver

from selenium.webdriver import ActionChains#引入动作链

browser = webdriver.Chrome()

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

browser.get(url)

browser.switch_to.frame('iframeResult')#切换到iframeResult框架

source = browser.find_element_by_css_selector('#draggable')#找到被拖拽对象

target = browser.find_element_by_css_selector('#droppable')#找到目标

actions = ActionChains(browser)#声明actions对象

actions.drag_and_drop(source, target)

actions.perform()#执行动作

Más operaciones: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

Seis, ejecute JavaScript

Algunas acciones pueden no proporcionar api, como la barra de progreso desplegable, en este momento, podemos ejecutar JavaScript a través del código.

1

2

3

4

5

from selenium import webdriver

browser = webdriver.Chrome()

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

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

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

Siete, obtén información del elemento

Obtener atributos

1

2

3

4

5

6

7

8

9

from selenium import webdriver

from selenium.webdriver import ActionChains

browser = webdriver.Chrome()

url = 'https://www.zhihu.com/explore'

browser.get(url)

logo = browser.find_element_by_id('zh-top-link-logo')#获取网站logo

print(logo)

print(logo.get_attribute('class'))

browser.close()

Obtener valor de texto

1

2

3

4

5

6

7

from selenium import webdriver

browser = webdriver.Chrome()

url = 'https://www.zhihu.com/explore'

browser.get(url)

input = browser.find_element_by_class_name('zu-top-add-question')

print(input.text)#input.text文本值

browser.close()

# Obtener ID, ubicación, nombre de etiqueta, tamaño

1

2

3

4

5

6

7

8

9

10

from selenium import webdriver

browser = webdriver.Chrome()

url = 'https://www.zhihu.com/explore'

browser.get(url)

input = browser.find_element_by_class_name('zu-top-add-question')

print(input.id)#获取id

print(input.location)#获取位置

print(input.tag_name)#获取标签名

print(input.size)#获取大小

browser.close()

Ocho, operación de marco

Frame es equivalente a una página web independiente. Si encuentra una subclase en el marco web de la clase principal, debe cambiar al marco de la subclase. Si la subclase encuentra la clase principal, primero debe cambiar.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

from selenium import webdriver

from selenium.common.exceptions import NoSuchElementException

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

print(source)

try:

    logo = browser.find_element_by_class_name('logo')

except NoSuchElementException:

    print('NO LOGO')

browser.switch_to.parent_frame()

logo = browser.find_element_by_class_name('logo')

print(logo)

print(logo.text)

Nueve, espera

Espera implícita

当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,

换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

1

2

3

4

5

6

from selenium import webdriver

browser = webdriver.Chrome()

browser.implicitly_wait(10)#等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回

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

input = browser.find_element_by_class_name('zu-top-add-question')

print(input)

 

显式等待

指定一个等待条件,和一个最长等待时间,程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常

1

2

3

4

5

6

7

8

9

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)

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)

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

 

详细内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

 

十一、前进后退-实现浏览器的前进后退以浏览不同的网页

1

2

3

4

5

6

7

8

9

10

import time

from selenium import webdriver

browser = webdriver.Chrome()

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

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

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

browser.back()

time.sleep(1)

browser.forward()

browser.close()

 

十二、Cookies

1

2

3

4

5

6

7

8

from selenium import webdriver

browser = webdriver.Chrome()

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

选项卡管理 增加浏览器窗口

1

2

3

4

5

6

7

8

9

10

11

import time

from selenium import webdriver

browser = webdriver.Chrome()

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

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('http://www.fishc.com')

十三、异常处理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from selenium import webdriver

browser = webdriver.Chrome()

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

browser.find_element_by_id('hello')

from selenium import webdriver

from selenium.common.exceptions import TimeoutException, NoSuchElementException

browser = webdriver.Chrome()

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

Supongo que te gusta

Origin blog.csdn.net/benli8541/article/details/112728386
Recomendado
Clasificación