我有以下Python脚本,其目的是https://bscscan.com/address/0xf811e41dc5271814ceb9aaf4f148478d5c6a0134#code使用位于“大纲”和“更多选项”按钮下方的“将源代码复制到剪贴板”按钮从www.example.com复制整个合同源代码。
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
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
driver.get('https://bscscan.com/address/0xf811e41dc5271814ceb9aaf4f148478d5c6a0134#code')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div/div/div/button'))).click()
WebDriverWait(driver, 20).until(
EC.element_to_be_clickable(
(By.XPATH, '/html/body/div[1]/main/div[4]/div[3]/div[2]/div/div[7]/div[2]/div[2]/div[1]/div[2]/span/a[1]')
)
).click()
driver.quit()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div/div/div/button'))).click()
用于单击“allow cookies”弹出窗口,当页面打开时,该窗口将阻止我想要的按钮。
在headless模式下运行时,使用options.add_argument("--headless")
启用了headless模式,我没有收到错误,但文本没有被复制。当我注解掉options.add_argument("--headless")
并在正常窗口下运行代码时,文本被复制。
我计划在后台运行这个脚本,从多个加密货币令牌中获取合约信息,因此能够在无头模式下运行它非常重要。
3条答案
按热度按时间p5cysglq1#
我想你应该设置窗口大小在无头模式,这将使您的无头会话类似于正常会话运行。
另外,你应该改进你的定位器。
如果这样效果更好,请告诉我:
pengsaosao2#
要打印所需文本,您需要引发WebDriverWait等待 visibility_of_element_located(),您可以使用以下任一定位器策略:
*注意:您必须添加以下导入:
您可以在如何使用Selenium-Python检索WebElement的文本中找到相关的讨论
备选
要单击
data-original-title
设置为 *Copy source code to clipboard
* 的WebElement并打印到控制台,可以使用clipboard模块,如下所示:代码块:
控制台输出:
qij5mzcb3#
尝试使用此选项:
driver.set_window_size(2560, 1440)
(或您使用的任何分辨率)在所有这些选项中:
options.add_argument("window-size=2560,1440")
,options.add_argument("--window-size=2560,1440")
,options.add_argument("start-maximized")
,driver.maximize_window()
这是唯一一个为我点击headless cookie按钮有效的。