Comandos comunes de selenio

Comandos comunes de selenio

Depuración remota de Chrome

Para evitar que el navegador sea detectado como controlado por un programa automatizado, podemos usar la depuración remota de Chrome combinada con selenio para controlar de forma remota Chrome y evitar el monitoreo.

Primero use cmd para agregar parámetros de inicio adicionales para el inicio de chrome.exe

# 如果chrome.exe未在环境变量中配置,需进入目录下运行
cd C:\Program Files (x86)\Google\Chrome\Application
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile" --profile-directory="Profile 1"
  • Presta atención al puerto que no se debe ocupar
  • user-data-dir: especifique el directorio del archivo de configuración, use el usuario predeterminado que puede ignorar
  • profile-directory especifica el usuario del navegador, el usuario predeterminado se puede ignorar

Ajustes de configuración comunes de Chrome

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
chrome_options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
chrome_options.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
# 添加User-Agent
chrome_options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
chrome_options.add_argument('--proxy-server=http://')  # 使用代理IP登录浏览器
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 使用远程调试端口操作浏览器,避免被监测为正在使用自动化程序控制
# 禁用浏览器弹窗
prefs = {
    
     'profile.default_content_setting_values' :  {
    
     'notifications' : 2 }}  
chrome_options.add_experimental_option('prefs',prefs)
#禁止插件
chrome_options.add_argument('--disable-plugins')     
# 禁用弹出拦截
chrome_options.add_argument('--disable-popup-blocking')  


from selenium import webdriver

# 创建WebDriver对象(通常默认为wd),指明Chrome浏览器驱动,并添加上述配置
wd = webdriver.Chrome(
    executable_path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe',
	options=chrome_options,
)
  • ejecutable_path es la ruta del chromedriver.exe descargado, si se coloca en el entorno de Python, puede ignorar esta opción

Instrucciones comunes de Webdriver

  • Establecer el tamaño de la ventana del navegador
# 窗口最大化
wd.maximize_window()
# 设置窗口指定大小
wd.set_window_size(1920, 1080)
  • Deje que el navegador abra la URL especificada
wd.get('https://www.baidu.com')
  • Establecer el tiempo máximo de espera
from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(driver, 15)  
  • Cerrar la ventana del navegador
wd.close()	# 关闭当前窗口
wd.quit()	# 关闭浏览器

Ver y seleccionar elementos en el navegador

Si desea conocer las características de los elementos web. Puede utilizar la barra de herramientas para desarrolladores del navegador para ayudarnos a ver y seleccionar elementos web. (Seleccione el elemento, haga clic con el botón derecho para verificar, puede ver el elemento HTML correspondiente a la página)

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-hotlinking. Se recomienda guardar la imagen y cargarla directamente (img-T1qHceGp-1591874068197) (C: \ Users \ hq0749a \ AppData \ Roaming \ Typora \ typora-user-images \ 1591864536461.png)]

Elemento de posicionamiento

wd = webdriver.Chrome()

A través de las instrucciones anteriores, asignamos un objeto tipo WebDriver a wd, de modo que podamos usar este objeto para controlar el navegador, como abrir la URL, seleccionar elementos de la interfaz, etc.

El código de abajo

wd.find_element_by_id('kw')

Utilice el método find_element_by_id del objeto WebDriver,

Hay muchas formas de ubicar elementos en el objeto WebDriver. Entre ellos están:

# 根据 元素的id 属性选择元素
find_element_by_id

# 根据 class属性、tag名 选择元素
find_element_by_tag_name
find_element_by_class_name

# 根据 元素的css 属性选择元素
find_element_by_css_selector

# 根据xpath来选择元素
find_element_by_xpath

Seleccionar elementos según su atributo de identificación

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-hotlinking. Se recomienda guardar la imagen y cargarla directamente (img-s9a5REnY-1591874068200) (C: \ Users \ hq0749a \ AppData \ Roaming \ Typora \ typora-user-images \ 1591864753087.png)]

Según los atributos de las etiquetas en el html anterior, podemos encontrar un atributo id cuyo valor de atributo es kw.

En html, id se puede usar como el número de un elemento. Si el elemento tiene un atributo id, entonces este id es único y único.

Por lo tanto, si el elemento tiene un id, es la forma más sencilla y eficiente de encontrar el elemento basándose en el id.

Ejemplo:

wd.find_element_by_id('kw')

Una vez que el navegador encuentra el elemento cuya identificación es kw, devuelve el resultado al programa de automatización a través del controlador del navegador, por lo que el método find_element_by_id devolverá un objeto de tipo WebElement. A través de este objeto WebElement, puede manipular los elementos de interfaz correspondientes.

# 找到元素后点击
wd.find_element_by_id('kw').click()

# 找到元素后传递字符串
wd.find_element_by_id('kw').send_keys('')

Seleccione el elemento según el atributo de clase del elemento y el nombre de la etiqueta.

Además de la identificación del elemento, también podemos seleccionar el elemento en función del atributo de clase del elemento.

Hay tipos de elementos y el atributo de clase se usa para marcar el tipo de elemento. En una página html específica, dado que los tipos de elementos pueden ser los mismos, podemos usar find_elements para ubicar todos los elementos del mismo tipo en el posicionamiento real.

P.ej:

wd.find_elements_by_class_name('s_ipt')

De manera similar, podemos usar el método find_elements_by_tag_name para seleccionar todos los elementos cuyo nombre de etiqueta es input

wd.find_elements_by_tag_name('input')

Nota:

Mediante el objeto WebElement text属性puede obtener el contenido de texto del elemento en una página web.

element = wd.find_elements_by_class_name('s_ipt')
print(element.text)

Si ninguno de los métodos anteriores puede localizar el control, es probable que esté en el iframe, el siguiente es el método para cambiar al iframe

driver.switch_to.frame()               #转入网页内iframe(内嵌的网页元素)
driver.switch_to.parent_frame()         #切回上一层frame
driver.switch_to_default_content()      #返回到主页面

La diferencia entre find_element y find_elements

Utilice find_elements para seleccionar todos los elementos que cumplan las condiciones. Si no hay elementos que cumplan las condiciones, devuelva una lista vacía

Use find_element para seleccionar el primer elemento que cumpla con la condición, si no hay ningún elemento que cumpla con la condición, arroje NoSuchElementException

Cambiar ventana web

driver.execute_script('window.open()')  # 开启一个选项卡
windows=driver.window_handles           # 获得当前浏览器所有窗口
driver.switch_to.window(windows[0])     # 切换到最左侧窗口
driver.switch_to.window(windows[-1])    # 切换到最新打开窗口(注:也就是最右侧窗口)

enviar formulario

El método submit () se usa para enviar el formulario, especialmente cuando no hay un botón de enviar

Por ejemplo, la operación "Enter" después de ingresar una palabra clave en el cuadro de búsqueda, luego puede enviar el contenido del cuadro de búsqueda a través de enviar ().

driver.find_element_by_id('query').submit()

Obtener información de la página

driver.current_url            # 获取当前网址
driver.page_source            # 获取源代码
driver.title                  # 获取当前页面标题内容
driver.delete_all_cookies()   # 删除所有cookie
driver.add_cookie({
    
    'name':5}) # 添加cookie
  • Obtener cookies
driver.get_cookies()  
cookie_list = []
for dict in cookies:
    cookie = dict['name'] + '=' + dict['value']
    cookie_list.append(cookie)
cookie = ';'.join(cookie_list)

Espera implícita y espera explícita

Espera implícita

Cuando no se encuentra un elemento, no devuelve inmediatamente un error de que el elemento no se puede encontrar. En su lugar, busque el elemento periódicamente (cada medio segundo) hasta que se encuentre el elemento o se exceda el tiempo de espera máximo especificado, luego se lanza una excepción (si es un método como find_elements, se devuelve una lista vacía) .

El objeto Webdriver de Selenium tiene un método llamado implicitly_wait

Este método acepta un parámetro para especificar el tiempo máximo de espera.

# 设置缺省等待时间
driver.implicitly_wait(10)

Espera explícita

Como su nombre lo indica, la espera explícita es establecer un tiempo de espera fijo después de ejecutar el código y luego continuar ejecutándose, el método de suspensión comúnmente utilizado del módulo de tiempo

Este método acepta un parámetro para especificar el tiempo máximo de espera.

import time
time.sleep(1)

El objeto río tiene un método llamado implicitly_wait

Este método acepta un parámetro para especificar el tiempo máximo de espera.

# 设置缺省等待时间
driver.implicitly_wait(10)

Espera explícita

Como su nombre lo indica, la espera explícita es establecer un tiempo de espera fijo después de ejecutar el código y luego continuar ejecutándose, el método de suspensión comúnmente utilizado del módulo de tiempo

Este método acepta un parámetro para especificar el tiempo máximo de espera.

import time
time.sleep(1)

Supongo que te gusta

Origin blog.csdn.net/weixin_45609519/article/details/106695171
Recomendado
Clasificación