from selenium import webdriver from selenium.webdriver.chrome.options import Options
补充
1 2 3 4 5
from selenium import webdriver from selenium.webdriver.chrome.options import Options as ChromeOptions from selenium.webdriver.edge.options import Options as EdgeOptions from selenium.webdriver.firefox.options import Options as FirefoxOptions from selenium.webdriver.ie.options import Options as IEOptions
os.rename('./articles/' + temp_title + '.pdf', './articles/' + title + '.pdf')
由于如果打开同一个网站的多个页面并保存pdf,那么很可能就会出现由于网站title相同而覆盖的情况,所以每次保存完毕后,改一下pdf的文件名。
注意:当网页异常等情况可能出现title为空的情况,那么这里改名的时候就会报异常错误,需要进行异常处理。
Cookies
参考:
Working with cookies | Selenium
等待
参考:
Waits | Selenium
显式等待
1 2 3 4 5 6 7 8
from selenium.webdriver.support.ui import WebDriverWait def document_initialised(driver): return driver.execute_script("return initialised")
driver.navigate("file:///race_condition.html") WebDriverWait(driver).until(document_initialised) el = driver.find_element(By.TAG_NAME, "p") assert el.text == "Hello from JavaScript!"
上方可以简化为下方
1 2 3 4 5
from selenium.webdriver.support.ui import WebDriverWait
driver.navigate("file:///race_condition.html") el = WebDriverWait(driver).until(lambda d: d.find_element_by_tag_name("p")) assert el.text == "Hello from JavaScript!"
/// <summary> /// Navigate to a url for your test /// </summary> /// <param name="url">String of where you want the browser to go to</param> public void GoToUrl(string url) { this.driver.Url = url; }
/// <summary> /// Navigate to a url for your test /// </summary> /// <param name="url">Uri object of where you want the browser to go to</param> public void GoToUrl(Uri url) { if (url == null) { throw new ArgumentNullException("url", "URL cannot be null."); }
# 查询 # 这将给予我全部的名称中含有 "grid" 的软件包,从这里,我可以得到准确的程序名称。 apt list --installed | grep grid #WARNING: apt does not have a stable CLI interface. Use with caution in scripts. #appgrid/now 0.298 all [installed,local]
Network is unreachable Network is unreachable OpenQA.Selenium.WebDriverException: Cannot start the driver service on http://localhost:39255/ at OpenQA.Selenium.DriverService.Start()
chromedriver: error while loading shared libraries: libnss3.so:
var options = new ChromeOptions(); options.AddArgument("--no-sandbox"); options.AddArgument("--disable-dev-shm-usage"); options.AddArgument("--headless");
var options = new ChromeOptions(); options.AddArgument("--no-sandbox"); options.AddArgument("--headless");
// 注意: TimeSpan.FromMinutes(5) 设置 5分钟 超时 var driver = new ChromeDriver(chromeDriverDirectory: "/app/tools/selenium/", options, commandTimeout: TimeSpan.FromMinutes(5));
driver.Navigate().GoToUrl(url);
OpenQA.Selenium.WebDriverException: unknown error: session deleted because of page crash
1 2 3 4 5 6 7 8 9 10
OpenQA.Selenium.WebDriverException: unknown error: session deleted because of page crash from unknown error: cannot determine loading status from tab crashed (Session info: headless chrome=88.0.4324.182) at OpenQA.Selenium.WebDriver.UnpackAndThrowOnError(Response errorResponse) at OpenQA.Selenium.WebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.WebDriver.ExecuteScriptCommand(String script, String commandName, Object[] args) at OpenQA.Selenium.WebDriver.ExecuteScript(String script, Object[] args) at WebScreenshot.Controllers.HomeController.SaveScreenshot(String url) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 109 at WebScreenshot.Controllers.HomeController.Get(String url) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 78
System.InvalidOperationException: session not created
1 2 3 4 5 6 7 8 9 10 11 12
System.InvalidOperationException: session not created from tab crashed (Session info: headless chrome=88.0.4324.182) (SessionNotCreated) at OpenQA.Selenium.WebDriver.UnpackAndThrowOnError(Response errorResponse) at OpenQA.Selenium.WebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.WebDriver.StartSession(ICapabilities desiredCapabilities) at OpenQA.Selenium.WebDriver..ctor(ICommandExecutor executor, ICapabilities capabilities) at OpenQA.Selenium.Chromium.ChromiumDriver..ctor(ChromiumDriverService service, ChromiumOptions options, TimeSpan commandTimeout) at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout) at OpenQA.Selenium.Chrome.ChromeDriver..ctor(String chromeDriverDirectory, ChromeOptions options, TimeSpan commandTimeout) at WebScreenshot.Controllers.HomeController.SaveScreenshot(String url) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 109 at WebScreenshot.Controllers.HomeController.Get(String url) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 78
var options = new ChromeOptions(); // https://stackoverflow.com/questions/59186984/selenium-common-exceptions-sessionnotcreatedexception-message-session-not-crea options.AddArgument("--no-sandbox"); options.AddArgument("--disable-dev-shm-usage"); options.AddArgument("--headless"); // 重要: 测试添加了这行后,才成功 options.AddArgument("--ignore-certificate-errors");
Timed out receiving message from renderer: 10.000
1 2 3 4 5 6 7 8 9 10 11 12
ChromeDriver was started successfully. [1646482757.506][SEVERE]: Timed out receiving message from renderer: 10.000 [1646482757.506][WARNING]: screenshot failed, retrying timeout: Timed out receiving message from renderer: 10.000 [1646482767.506][SEVERE]: Timed out receiving message from renderer: 10.000 OpenQA.Selenium.WebDriverTimeoutException: timeout: Timed out receiving message from renderer: 10.000 (Session info: headless chrome=88.0.4324.182) at OpenQA.Selenium.WebDriver.UnpackAndThrowOnError(Response errorResponse) at OpenQA.Selenium.WebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) at OpenQA.Selenium.WebDriver.GetScreenshot() at WebScreenshot.Controllers.HomeController.SaveScreenshot(String url, String jsurl, String jsStr) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 288 at WebScreenshot.Controllers.HomeController.FileCache(Byte[]& cacheEntry, String url, String jsurl, String jsStr) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 167 at WebScreenshot.Controllers.HomeController.Get(String url, String jsurl, Int32 windowWidth, Int32 windowHeight) in /src/src/WebScreenshot/Controllers/HomeController.cs:line 130