Notas introductorias del estudio del rastreador Día 5 + registro de los pequeños problemas encontrados

1. El objeto de etiqueta extrae contenido de texto y valores de atributos

1. Obtener texto: element_text
2. Obtener valor de atributo: element.get_attribute("nombre de atributo")

Código: (reescribe el contenido en el bucle for sobre la base del aprendizaje del día 4)

import time
from selenium import webdriver

url = 'https://bj.58.com/chuzu/?PGTID=0d200001-0000-1fd0-27cd-e5f5a55e18c9&ClickID=1'
driver = webdriver.Chrome()
driver.get(url)

#取出标题
el_list = driver.find_elements_by_xpath('/html/body/div[6]/div[2]/ul/li/div[2]/h2/a')

for el in el_list:
    print(el.text, el.get_attribute('href'))

La salida final del bucle for es la siguiente: (texto + valor de atributo)
inserte la descripción de la imagen aquí

2. Cambio de etiqueta

1. Obtenga el identificador de ventana (lista)
identificador: apunte a la identificación del objeto de página de pestaña
current_windows = driver.window_handles

2. Cambie la etiqueta a través del identificador de ventana (subíndice de índice de lista)
driver.switch_to.window(current_windows[0])

Código:
inserte la descripción de la imagen aquí
busque el botón "alquilar" en la imagen de arriba - haga clic derecho, verifique - copie xpath - complete find_element ()

from selenium import webdriver
from selenium.webdriver.common.by import By

url = 'http://jn.58.com/'
driver = webdriver.Chrome()
driver.get(url)

#先打印出来检查一下
print(driver.current_url)
print(driver.window_handles)

#定位并且点击租房按钮
el = driver.find_element(By.XPATH,'/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[1]/a')
el.click()

#点击以后再打印一下url和句柄
print(driver.current_url)
print(driver.window_handles)

El código anterior es para obtener la lista de identificadores. (Usé find_element_by_xpath() al principio, y encontré un error más tarde. Consulte el hipervínculo a continuación para ver el método de corrección y, finalmente, use find_element() en su lugar). Después de ejecutar el código anterior, puede ver que
inserte la descripción de la imagen aquí
el identificador de salida es solo una línea cuando no hay clic, y hay dos ventanas después de hacer clic, por lo que la lista de identificadores es de dos líneas. Desde la URL
aquí , se puede ver que la operación se realiza principalmente en la página de inicio, y la página no salta a la página recién abierta para la operación.

Si desea cambiar de ventana , agregue el siguiente código:
Nota: copie el xpath del título de la página abierta más tarde en find_elements() y elimine el índice de la etiqueta li para seleccionar todos los títulos.
inserte la descripción de la imagen aquí
Agregue después del código justo ahora:

driver.switch_to.window(driver.window_handles[-1])

el_list = driver.find_elements(By.XPATH,'/html/body/div[6]/div[2]/ul/li/div[2]/h2/a')
print(len(el_list)) #switch切换之后长度不为0

Si switch_to.window() está comentado, la longitud de salida es 0, porque la página de inicio no tiene una etiqueta correspondiente antes de que se cambie la página.

3. Cambio de ventana

Tome el espacio QQ de inicio de sesión como ejemplo:
inserte la descripción de la imagen aquí
verifique: verifique el botón 'inicio de sesión con contraseña de cuenta' y la identificación del cuadro de entrada de número de cuenta y contraseña y la identificación del botón de inicio de sesión.

Código: (en send_keys() a continuación, debe ingresar su cuenta y contraseña para iniciar sesión)

from selenium import webdriver
from selenium.webdriver.common.by import By

url = 'https://qzone.qq.com/'
driver = webdriver.Chrome()
driver.get(url)

el_frame = driver.find_element(By.XPATH,'//*[@id="login_frame"]')
driver.switch_to.frame('login_frame')

driver.find_element(By.ID,'switcher_plogin').click()
driver.find_element(By.ID,'u').send_keys('自己的账号')
driver.find_element(By.ID,'p').send_keys('自己的密码')
driver.find_element(By.ID,'login_button').click()

4. Funcionamiento de las cookies

código:

from selenium import webdriver

url = 'https://www.baidu.com/'
driver = webdriver.Chrome()
driver.get(url)

# print(driver.get_cookies())

# cookies = {}
# for data in driver.get_cookies():
#     cookies[data['name']] = data['value']
#上面三行写成正则表达式,如下:
cookies = {
    
    data['name']:data['value'] for data in driver.get_cookies()}

print(cookies)

resultado de la operación:
inserte la descripción de la imagen aquí

Cinco, ejecuta el código js

Cuando nos encontramos con una nueva página, el botón en el que se debe hacer clic no está en la página (tienes que tirar hacia abajo para verlo)

Arrastrar la barra de desplazamiento:

js = 'desplazarse a (x, y)'

Aquí x es generalmente 0, y si arrastra hacia abajo, y debe ingresar un valor mayor que 0.

código:

from selenium import webdriver
import time

url = 'https://www.某个网址.com/'
driver = webdriver.Chrome()
driver.get(url)

#js语句
js = 'window.scrollTo(0,document.body.scrollHeight)'
#执行js语句
driver.execute_script(js)

time.sleep(5)
driver.quit()

6. Página en espera

3 categorías de esperas de página:

1. Clasificación Obligatoria

Establecer un tiempo de espera fijo:

tiempo.dormir(5)

2. Clasificación implícita (recomendado)

Establezca el tiempo de espera, si el elemento correspondiente ha sido localizado antes de que finalice el tiempo, continúe con el siguiente paso.

conductor.implicitly_wait(10)

3. Mostrar clasificación (entender)

Espere explícitamente un elemento.

4. Caso: (Volteo de página de Taobao)

código:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

url = 'https://www.taobao.com/'
driver = webdriver.Chrome()
driver.get(url)
time.sleep(1)

for i in range(10):
    i += 1
    try:
        time.sleep(3)
        element = driver.find_element(By.XPATH,'//div[@class="shop-inner"]/h3[1]/a')
        print(element.get_attribute('href'))
        break
    except:
        js = 'window.scrollTo(0,{})'.format(i*500)
        driver.execute_script(js)

driver.quit()

Siete, objeto de configuración

Habilitar el modo sin cabeza

código:

from selenium import webdriver

url = 'http://www.baidu.com/'

#创建配置对象
opt = webdriver.ChromeOptions()

#添加配置参数
opt.add_argument('--headless')
opt.add_argument('--disable-gpu')

#创建浏览器对象的时候添加配置对象
driver = webdriver.Chrome(options=opt)

driver.get(url)

driver.save_screenshot('无界面浏览器截图.png')

pequeño problema encontrado

1. La gramática del método de posicionamiento del elemento de selenio ha cambiado

Error: advertencia de desuso: los comandos find_element_by_* están en desuso. Utilice find_element() en su lugar
el = driver.find_element_by_xpath
inserte la descripción de la imagen aquí
corresponde a la solución que quiero usar xpath aquí:
obsoleto by_xpath

Del mismo modo, find_element_by_id, class y otros métodos también se reemplazan por el método find_element().
nuevo método de posicionamiento

Finalmente recuerda importar:

de selenium.webdriver.common.by import Por

2. Al configurar el objeto, el parámetro chrome_options informa de un error

Código al principio:

#创建浏览器对象的时候添加配置对象
driver = webdriver.Chrome(chrome_options=opt)

Error:

Advertencia de obsolescencia: use opciones en lugar de chrome_options

Probablemente porque el parámetro chrome_options ha quedado obsoleto.

Simplemente reemplace chrome_options con opciones.

Acho que você gosta

Origin blog.csdn.net/qq_51669241/article/details/122530796
Recomendado
Clasificación