繁体   English   中英

在 Python 中使用 Selenium “选择”时出现语法错误 3

[英]Syntax Error using Selenium “Select” in Python 3

我在 Python 3 中使用 Selenium 来自动化我的 Chrome 驱动程序,登录到HathiTrust并将新项目添加到名为“INSULAE”的集合中。

我的登录详细信息存储在我的 Chrome 配置文件中,我的脚本设法导航到正确的结果页面和 select 该页面上的所有项目。 但是,当我尝试使用“选择”访问collections 下拉菜单并按名称选择“INSULAE”集合时,我的脚本会中断。 我担心它背后的问题是我一开始没有正确导入“Select”。 我在教程中发现了两个不同的版本,但不知道在 Python 3 中使用哪一个(请参阅下面脚本中的注释)。

我收到的错误通知是:

 File "<ipython-input-43-a99cf2afc99b>", line 57
    dropdown.select_element_by_visible_text("INSULAE") # choose collection by name
           ^
SyntaxError: invalid syntax

这是我的完整脚本:

# Script to automatically add new items to the HathiTrust Featured Collection

# Starting SELENIUM for web automation

import selenium
from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

# I found these two ways of importing "Select" and do not know which one is correct:
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import Select

from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from time import sleep # may be needed to introduce pauses when performance issues occur
import urllib # needed to merge strings to new URLs

# Opening CHROME with custom profile

options=webdriver.ChromeOptions()
options.add_argument("--user-data-dir=C:\\Users\\mbarg\\AppData\\Local\\Google\\Chrome\\User Data\\")
options.add_argument('--profile-directory=Profile 1')
driver = webdriver.Chrome(executable_path='C:\\chromedriver_win32\\chromedriver.exe', options=options)
driver.implicitly_wait(2)
driver.maximize_window()


print("Browser opened.")

# Navigate to HathiTrust and log in

driver.get("https://babel.hathitrust.org/Shibboleth.sso/Login?entityID=https://google.cirrusidentity.com/gateway&target=https://babel.hathitrust.org") #URL of guest log-in via GOOGLE
print("You have successfully logged in!")  

# Iterate through result pages

QueryURL="https://babel.hathitrust.org/cgi/ls?a=srchls;q1=insula%20insulae%20insulis%20insul%20insuln%20island%20islands%20isle%20isles%20%C3%AEle%20%C3%AEles%20isola%20isole;field1=ocr;anyall1=any;yop=between;pdate_start=1600;pdate_end=1800;facet=countryOfPubStr%3A%22Germany%22;sz=100;pn="
pages=range(3, 138)

for p in pages:
    driver.refresh()
    target=[QueryURL, str(p)]
    s=""
    targetURL="".join(target)
    print(targetURL)   
# navigate to target URL
    driver.get(targetURL)
    driver.find_element_by_xpath("//button[@id='action-select-all']").click() # select all items on page
    dropdown=select(driver.find_element_by_name("Choose collection") # navigate to dropdown
    dropdown.select_element_by_visible_text("INSULAE") # choose collection by name
    driver.find_element_by_id("line1980").click() # add selected results to collection
    print("Page no.", p, "has been added!") 
                    
# finish and close browser
print("All requested items have been added!")
driver.quit()

我以前从未尝试过自动从下拉菜单中进行选择,非常感谢您的建议。

我发现我的脚本有两个主要问题:

a) 我忘记了第 56 行中的第二个圆括号(错误通知中指示的高一行)。 b)我最初使用select_element_by_visible_text而不是select_by_visible_text

修复后,我还设法改进了从 HTML 源代码调用各个元素。

这是更新后的脚本的样子:

# Script to automatically add new items to the HathiTrust Featured Collection

# Starting SELENIUM for web automation

import selenium
from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from time import sleep # needed to introduce pauses
import urllib # needed to merge strings to new URLs

# Opening CHROME with custom profile

options=webdriver.ChromeOptions()
options.add_argument("--user-data-dir=C:\\Users\\mbarg\\AppData\\Local\\Google\\Chrome\\User Data\\")
options.add_argument('--profile-directory=Profile 1')
#driver = webdriver.Chrome(ChromeDriverManager().install())
driver = webdriver.Chrome(executable_path='C:\\chromedriver_win32\\chromedriver.exe', options=options)
driver.implicitly_wait(2)
driver.maximize_window()

print("Browser opened.")

# Navigate to the application home page and log in

driver.get("https://babel.hathitrust.org/Shibboleth.sso/Login?entityID=https://google.cirrusidentity.com/gateway&target=https://babel.hathitrust.org") #URL of guest log-in via GOOGLE
print("You have successfully logged in!")  

# Iterate through result pages

QueryURL="https://babel.hathitrust.org/cgi/ls?a=srchls;q1=insula%20insulae%20insulis%20insul%20insuln%20island%20islands%20isle%20isles%20%C3%AEle%20%C3%AEles%20isola%20isole;field1=ocr;anyall1=any;yop=between;pdate_start=1600;pdate_end=1800;facet=countryOfPubStr%3A%22Germany%22;sz=100;pn="
pages=range(3, 138)

for p in pages:
    driver.refresh()
    target=[QueryURL, str(p)]
    s=""
    targetURL="".join(target)
    print(targetURL)   
# navigate to target URL
    driver.get(targetURL)
    driver.find_element_by_xpath("//button[@id='action-select-all']").click() # select all items on page
    # <select size="1" id="collection-chooser"></select>
    dropdown=Select(driver.find_element_by_id("collection-chooser")) # navigate to dropdown
    # <option value="1751299776">INSULAE</option>
    dropdown.select_by_visible_text("INSULAE") # choose collection from list of options
    # <button class="button btn btn-primary" id="addits">Add</button>
    driver.find_element_by_id("addits").click() # add selected results to collection
    print("Page no.", p, "has been added!") 
                    
# finish and close browser
print("All requested items have been added!")
driver.quit()

您之前忘记了该行的右括号:

dropdown=select(driver.find_element_by_name("Choose collection")) # navigate to dropdown
dropdown.select_element_by_visible_text("INSULAE")

暂无
暂无

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

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