如何使用 selenium python 在 headless 中单击按钮并且按钮内部有 div 标签?
how to click button in headless and button have div tag inside it using selenium python?
将此代码用于无头方法..
网站 link:https://www.na-kd.com/en/sweaters?sortBy=popularity&count=108
try:
element = self.driver.find_element_by_xpath('//*[@id="container"]/div/div/div[3]/div/div[4]/div/div[1]/div[2]/div[1]/button')
self.driver.execute_script("arguments[0].click();", element)
except Exception as e:
print('Error in clicking BTN : '+str(e))
因为这个 btn 里面有 div-tag,所以它不能与无头和虚拟显示器一起工作。
我也试试等等:
try:
element=WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="container"]/div/div/div[3]/div/div[4]/div/div[1]/div[2]/div[1]/button')))
self.driver.execute_script("arguments[0].click();", element)
except Exception as e:
print('Error in clicking BTN : '+str(e))
chromedriver --version
ChromeDriver 78.0.3904.70
Google Chrome 78.0.3904.108
在触发任何事件时使用无头模式添加 window-size() 因为无头浏览器无法识别没有 window 大小的点击位置。
单击 Load more products
按钮 Induce WebDriverWait() 并等待 element_to_be_clickable
() 并使用下面的 xpath
要验证按钮是否被点击,只需向下滚动页面并从 div 标签中获取值。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
# Headless option with window-size()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('window-size=1920x1080');
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.na-kd.com/en/sweaters?sortBy=popularity&count=108&ssr=on&loadfailure=1")
# Load more products button
element=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[.//div[text()='Load more products']]")))
driver.execute_script("arguments[0].click();", element)
# To verify that whether button is clicked or not
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2) #wait for page to load
print(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='qa6 qmz qn0']"))).text)
将此代码用于无头方法.. 网站 link:https://www.na-kd.com/en/sweaters?sortBy=popularity&count=108
try:
element = self.driver.find_element_by_xpath('//*[@id="container"]/div/div/div[3]/div/div[4]/div/div[1]/div[2]/div[1]/button')
self.driver.execute_script("arguments[0].click();", element)
except Exception as e:
print('Error in clicking BTN : '+str(e))
因为这个 btn 里面有 div-tag,所以它不能与无头和虚拟显示器一起工作。
我也试试等等:
try:
element=WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable((By.XPATH, '//*[@id="container"]/div/div/div[3]/div/div[4]/div/div[1]/div[2]/div[1]/button')))
self.driver.execute_script("arguments[0].click();", element)
except Exception as e:
print('Error in clicking BTN : '+str(e))
chromedriver --version
ChromeDriver 78.0.3904.70
Google Chrome 78.0.3904.108
在触发任何事件时使用无头模式添加 window-size() 因为无头浏览器无法识别没有 window 大小的点击位置。
单击 Load more products
按钮 Induce WebDriverWait() 并等待 element_to_be_clickable
() 并使用下面的 xpath
要验证按钮是否被点击,只需向下滚动页面并从 div 标签中获取值。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
# Headless option with window-size()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('window-size=1920x1080');
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://www.na-kd.com/en/sweaters?sortBy=popularity&count=108&ssr=on&loadfailure=1")
# Load more products button
element=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[.//div[text()='Load more products']]")))
driver.execute_script("arguments[0].click();", element)
# To verify that whether button is clicked or not
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2) #wait for page to load
print(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='qa6 qmz qn0']"))).text)