繁体   English   中英

无法使用 python selenium webdriver 切换到新页面?

[英]can not switch to a new page using python selenium webdriver?

我需要抓取网站的 CSV 结果( https://requestmap.webperf.tools/ )。 但我不能。

这是我需要做的过程:

1-加载网站( https://requestmap.webperf.tools/

2-输入一个新网站作为输入(例如, https://stackoverflow.com/

3-点击提交

4-在提交后打开的新页面中,下载页面末尾的csv文件

但我认为驱动程序具有主页并且不会切换到新页面。 这就是为什么我无法下载 CSV 文件的原因。

你能告诉我怎么做吗? 这是我的代码:

options = webdriver.ChromeOptions()
options.add_argument('-headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.get("https://requestmap.webperf.tools/")


driver.find_element_by_id("url").send_keys("https://stackoverflow.com/")
driver.find_element_by_id("submitter").click()

我已经测试了不同的方法来解决我的问题:首先:我从这里得到了这段代码:但它不起作用。

window_after = driver.window_handles[1]                           
driver.switch_to.window(window_after)

我也尝试过thisthis ,但它们效果不佳。

# wait to make sure there are two windows open
# it is not working
WebDriverWait(driver, 30).until(lambda d: len(d.window_handles) == 2)

# switch windows
# it is not working
driver.switch_to_window(driver.window_handles[1])

content = driver.page_source
soup = BeautifulSoup(content)
driver.find_elements_by_name("Download CSV")

那么我怎样才能解决这个问题呢?

python 中是否还有其他方法可以这样做并切换到新的 windows?

问题是您的等待条件不正确。 单击提交 window 更改后,它不会打开新的 window。

更好的选择是等待带有.csv 文件的页面加载然后下载。

我的解决方案:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


options = webdriver.ChromeOptions()
options.add_argument('-headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.get("https://requestmap.webperf.tools/")

driver.find_element_by_id("url").send_keys("https://stackoverflow.com/")
driver.find_element_by_id("submitter").click()

WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.XPATH, "//a[contains(text(), 'Download CSV')]")))
driver.find_element(By.XPATH, "//a[contains(text(), 'Download CSV')]").click()

如您所见,我正在等到找到“下载CSV”,然后按下它。

另请注意,下载目录将是 chrome 默认目录,但您可以通过添加以下内容进行更改:

options.add_argument("download.default_directory=path")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM