我尝试使用webdriver自动下载报告。
这是我到目前为止所尝试的内容:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome("C:/Users/Kob/Desktop/Python projects/Chrome webdriver/Chromedriver.exe")
driver.get("http://www2.ops3.moc.go.th/")
main_window = driver.window_handles[0]
new_window1 = driver.window_handles[1]
new_window2 = driver.window_handles[2]
Export = driver.find_element_by_link_text("EXPORT")
Export.click()
driver.switch_to.window(new_window1)
driver.close()
driver.switch_to.window(new_window2)
driver.close()
driver.switch_to.window(main_window)
driver.switch_to.frame("data")
driver.implicitly_wait(5)
Commodity = driver.find_element_by_link_text("Commodity")
Commodity.click()
Year = Select(driver.find_element_by_name("q_Year"));
Month = Select(driver.find_element_by_name("q_Month"));
Currency = Select(driver.find_element_by_name("q_currency"));
Year.select_by_index("0")
Month.select_by_index("1")
Currency.select_by_index("1")
hscode = driver.find_element_by_name("q_hsList")
hscode.send_keys("8507")
driver.execute_script("doReport()")
driver.find_element_by_id("exportdlgImage").click()

使用此代码,我收到了此错误消息。
NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"exportdlgImage"}
(Session info: chrome=65.0.3325.181)
(Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Windows NT 6.3.9600 x86_64)

问题
是否出现错误消息,因为浏览器确认它仍然在第一个标签页上工作,或者我在找到.gif文件时做错了什么?
如何在同一浏览器中的标签之间移动?我做了一些研究,但我发现只发送crtl + t键和页面上下。我不确定该解决方案是否可以在我的案例中使用,因为当执行脚本doReport
时,它会自动生成一个新选项卡。
答案 0 :(得分:0)
问题1:发生错误是因为正如您在问题2中提到的那样,doReport
导致另一个标签打开。调用driver.switch_to.window()
后,您必须执行另一个doReport
。
问题2: driver.switch_to.window()
是在同一浏览器实例中将Selenium的兴趣从一个标签或窗口更改为另一个标签或窗口的命令。
答案 1 :(得分:0)
报告将在新窗口中打开。您需要告诉Selenium切换到该窗口,然后才能与其中的元素进行交互:
windows = driver.window_handles
driver.find_element_by_partial_link_text("preview report").click()
WebDriverWait(driver, 5).until(EC.new_window_is_opened(windows))
new_window = list(set(windows) - set(driver.window_handles))[0]
driver.switch_to.window(new_window)