Tabla de contenido
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)
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:
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
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.
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:
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:
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
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.