Rastreador de selenio y python (dos) [en espera y multiventana (objetivo 1)]

con un propósito claro

1. Nuestro objetivo es abrir primero una página web
2. Localizar uno o más elementos para realizar la operación correspondiente
3. Operar y obtener el elemento según las necesidades y procesar los datos adquiridos
4. Luego abrirlo nuevamente según las necesidades. Muchas páginas web repiten las operaciones anteriores. En
general, nuestros pasos se dividen en estos cuatro pasos principales, pero cada paso se puede subdividir en varios pasos pequeños. Entonces ahora venimos a lograr el objetivo uno

Abrir página web (segmento uno, abrir página web)

Esto se ha escrito en el blog anterior.
Utilice el método get () para abrir la página web

from selenium import webdriver
drive=webdriver.Chrome()
drive.maximize_window()#窗口最大化
drive.get('https://www.baidu.com/')
print(len(drive.page_source))#page_source是返回的网址源码

Abrir página web (subdivisión dos, página abierta)

Malentendido presentación ; cuando usamos el método get (), se abre una nueva página web.
Por ejemplo;

from selenium import webdriver
drive=webdriver.Chrome()
drive.maximize_window()#窗口最大化
drive.get('https://www.baidu.com/')
drive.get('https://123.sogou.com/')
print(len(drive.page_source))#page_source是返回的网址源码

En la superficie, parece que se abren dos páginas web, pero de hecho solo se abre una página web al final, lo que equivale a cerrar la página web anterior y abrir la página web siguiente. Pero cuando se realiza un trabajo de rastreo real, a menudo salta de una página a otra y luego retrocede. Es decir, esperamos que el navegador esté en este estado
Inserte la descripción de la imagen aquí
y abra otro sobre la base original.
Postura correcta
1. Use el método execute_Script () para cambiar de página web
2. Obtenga la posición de la ventana (la primera ventana)
3. Use switc_to_window () para cambiar El
código es el siguiente;

from selenium import webdriver
drive=webdriver.Chrome()
drive.maximize_window()#窗口最大化
drive.get('https://www.baidu.com/')
print(len(drive.page_source))#page_source是返回的网址源码

drive.execute_script("window.open('https://123.sogou.com/')")
#drive.window_handles获取窗口通过索引定位窗口
drive.switch_to_window(drive.window_handles[1])

El efecto es el siguiente;
Inserte la descripción de la imagen aquí

Abra la página web (subdivisión tres, esperando para cargar) [espera implícita]

Abrir una página web puede ser rápido, pero cargar una página web no lo es necesariamente. Si abre una página web sin cargar el elemento correspondiente y se apresura a localizar el elemento, definitivamente obtendrá un error.
1. La llamada espera implícita es en realidad equivalente a importar el módulo de tiempo y usar el método sleep (). Pero lo que es más especial es que el selenio es más complicado (es inútil usar sleep () directamente en varios subprocesos que vuelan juntos, y también necesita ejecutarse y cargarse solo).
Use directamente el método implícitamente_wait () y
use el ejemplo del blog anterior.

from selenium import webdriver

drive=webdriver.Chrome()
drive.get('https://www.baidu.com/')
############
drive.implicitly_wait(10)#等待十秒
InputTag=drive.find_element_by_name('wd')
InputTag.send_keys('python')
############
SubmitBut=drive.find_element_by_xpath('//input[@type="submit" and @value="百度一下"]')
SubmitBut.click()


Abra la página web (subdivisión tres, esperando la carga) [espera explícita]

Esto es un poco más inteligente, puede agregar la condición de juicio para no morir. Por supuesto, se importan más cosas.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec
#Ec加入判断条件的东东

el código se muestra a continuación;

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as Ec




drive=webdriver.Chrome()
drive.maximize_window()
drive.get('https://www.baidu.com/')
drive.implicitly_wait(10)
print(len(drive.page_source))


try:
    InputTag=WebDriverWait(drive,10).until(
        Ec.presence_of_element_located((By.ID,'kw'))
    )
    #等待十秒要是提前出现了就不等了
    InputTag.send_keys('python')


except Exception as error:
    print(error)




Enter=drive.find_element(By.ID,'su')
Enter.click()
print(len(drive.page_source))

Además, hay muchas condiciones de juicio,
Inserte la descripción de la imagen aquí
creo que tu inglés no será tan malo.

Código de demostración final

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as Ec




drive=webdriver.Chrome()
drive.maximize_window()
drive.get('https://www.baidu.com/')
drive.implicitly_wait(10)
print(len(drive.page_source))


try:
    InputTag=WebDriverWait(drive,10).until(
        Ec.presence_of_element_located((By.ID,'kw'))
    )
    InputTag.send_keys('python')


except Exception as error:
    print(error)




Enter=drive.find_element(By.ID,'su')
Enter.click()
print(len(drive.page_source))

'''切换网页'''

drive.execute_script("window.open('https://123.sogou.com/')")
drive.switch_to_window(drive.window_handles[1])


Inserte la descripción de la imagen aquí
Además, hay un pequeño detalle aquí.
Inserte la descripción de la imagen aquí
Es por eso que usa selenium para obtener el contenido de Ajax. Por supuesto, puede encontrar directamente la interfaz para descifrar los parámetros entrantes.

Supongo que te gusta

Origin blog.csdn.net/FUTEROX/article/details/108428656
Recomendado
Clasificación