TypeError: __init__() got an unexpected keyword argument 'service' error using Python Selenium ChromeDriver with company pac file
TypeError: __init__() got an unexpected keyword argument 'service' error using Python Selenium ChromeDriver with company pac file
我已经为这个问题苦苦挣扎了一段时间,但现在我又回来了。我正在尝试使用 selenium 使用 pac 文件从公司代理后面的 URL 抓取数据。
我正在使用 Chromedriver,我的浏览器在其配置中使用 pac 文件。
我一直在尝试使用 desired_capabilities,但文档很糟糕,或者我没有掌握某些东西。最初,我试图用 beautifulsoup 进行网络抓取,但我现在需要的数据在 javascript 中,无法用 bs4 读取。
下面是我的代码:
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_capabilities = webdriver.DesiredCapabilities.CHROME.copy()
PAC_PROXY = {
'proxyAutoconfigUrl': 'http://proxy-pac/proxy.pac',
}
proxy = Proxy()
proxy.proxy_autoconfig_url = PAC_PROXY['proxyAutoconfigUrl']
desired_capabilities = {}
proxy.add_to_capabilities(desired_capabilities)
URL = "https://mor.nlm.nih.gov/RxClass/search?query=ALIMENTARY%20TRACT%20AND%20METABOLISM%7CATC1-4&searchBy=class&sourceIds=a&drugSources=atc1-4%7Catc%2Cepc%7Cdailymed%2Cmeshpa%7Cmesh%2Cdisease%7Cmedrt%2Cchem%7Cdailymed%2Cmoa%7Cdailymed%2Cpe%7Cdailymed%2Cpk%7Cmedrt%2Ctc%7Cfmtsme%2Cva%7Cva%2Cdispos%7Csnomedct%2Cstruct%7Csnomedct%2Cschedule%7Crxnorm"
service = Service('C:\Program Files\Chrome Driver\chromedriver.exe')
driver = webdriver.Chrome(service=service)
driver.get(URL)
print(driver.requests[0].headers, driver.requests[0].response)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'tr.dbsearch')))
print(pd.read_html(driver.page_source)[1].iloc[:,:-1])
pd.read_html(driver.page_source)[1].iloc[:,:-1].to_csv('table.csv',index=False)
我不确定为什么会收到:
TypeError: __init__() got an unexpected keyword argument 'service'
即使我已将路径正确添加到我的系统环境变量中,如下所示:
基本上我想做的是从 https://mor.nlm.nih.gov/RxClass/search?query=ALIMENTARY%20TRACT%20AND%20METABOLISM%7CATC1-4&searchBy=class&sourceIds=a&drugSources=atc1-4%7Catc%2Cepc%7Cdailymed%2Cmeshpa%7Cmesh%2Cdisease%7Cmedrt%2Cchem%7Cdailymed%2Cmoa%7Cdailymed%2Cpe%7Cdailymed%2Cpk%7Cmedrt%2Ctc%7Cfmtsme%2Cva%7Cva%2Cdispos%7Csnomedct%2Cstruct%7Csnomedct%2Cschedule%7Crxnorm
中抓取 table 中的数据,然后将其存储到 pandas 数据帧并将其传递到 csv 文件。
如果您仍在使用 v3.x 那么您不应该使用 Service()
在这种情况下 key executable_path 是相关的。在那种情况下,代码行将是:
driver = webdriver.Chrome(executable_path='C:\Program Files\Chrome Driver\chromedriver.exe')
否则,如果您使用 selenium4,则必须使用 Service()
,在这种情况下,key executable_path 不再相关。所以你需要更改代码行:
service = Service(executable_path='C:\Program Files\Chrome Driver\chromedriver.exe')
driver = webdriver.Chrome(service=service)
如:
service = Service('C:\Program Files\Chrome Driver\chromedriver.exe')
我已经为这个问题苦苦挣扎了一段时间,但现在我又回来了。我正在尝试使用 selenium 使用 pac 文件从公司代理后面的 URL 抓取数据。 我正在使用 Chromedriver,我的浏览器在其配置中使用 pac 文件。
我一直在尝试使用 desired_capabilities,但文档很糟糕,或者我没有掌握某些东西。最初,我试图用 beautifulsoup 进行网络抓取,但我现在需要的数据在 javascript 中,无法用 bs4 读取。
下面是我的代码:
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_capabilities = webdriver.DesiredCapabilities.CHROME.copy()
PAC_PROXY = {
'proxyAutoconfigUrl': 'http://proxy-pac/proxy.pac',
}
proxy = Proxy()
proxy.proxy_autoconfig_url = PAC_PROXY['proxyAutoconfigUrl']
desired_capabilities = {}
proxy.add_to_capabilities(desired_capabilities)
URL = "https://mor.nlm.nih.gov/RxClass/search?query=ALIMENTARY%20TRACT%20AND%20METABOLISM%7CATC1-4&searchBy=class&sourceIds=a&drugSources=atc1-4%7Catc%2Cepc%7Cdailymed%2Cmeshpa%7Cmesh%2Cdisease%7Cmedrt%2Cchem%7Cdailymed%2Cmoa%7Cdailymed%2Cpe%7Cdailymed%2Cpk%7Cmedrt%2Ctc%7Cfmtsme%2Cva%7Cva%2Cdispos%7Csnomedct%2Cstruct%7Csnomedct%2Cschedule%7Crxnorm"
service = Service('C:\Program Files\Chrome Driver\chromedriver.exe')
driver = webdriver.Chrome(service=service)
driver.get(URL)
print(driver.requests[0].headers, driver.requests[0].response)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'tr.dbsearch')))
print(pd.read_html(driver.page_source)[1].iloc[:,:-1])
pd.read_html(driver.page_source)[1].iloc[:,:-1].to_csv('table.csv',index=False)
我不确定为什么会收到:
TypeError: __init__() got an unexpected keyword argument 'service'
即使我已将路径正确添加到我的系统环境变量中,如下所示:
基本上我想做的是从 https://mor.nlm.nih.gov/RxClass/search?query=ALIMENTARY%20TRACT%20AND%20METABOLISM%7CATC1-4&searchBy=class&sourceIds=a&drugSources=atc1-4%7Catc%2Cepc%7Cdailymed%2Cmeshpa%7Cmesh%2Cdisease%7Cmedrt%2Cchem%7Cdailymed%2Cmoa%7Cdailymed%2Cpe%7Cdailymed%2Cpk%7Cmedrt%2Ctc%7Cfmtsme%2Cva%7Cva%2Cdispos%7Csnomedct%2Cstruct%7Csnomedct%2Cschedule%7Crxnorm
中抓取 table 中的数据,然后将其存储到 pandas 数据帧并将其传递到 csv 文件。
如果您仍在使用 Service()
在这种情况下 key executable_path 是相关的。在那种情况下,代码行将是:
driver = webdriver.Chrome(executable_path='C:\Program Files\Chrome Driver\chromedriver.exe')
否则,如果您使用 selenium4,则必须使用 Service()
,在这种情况下,key executable_path 不再相关。所以你需要更改代码行:
service = Service(executable_path='C:\Program Files\Chrome Driver\chromedriver.exe')
driver = webdriver.Chrome(service=service)
如:
service = Service('C:\Program Files\Chrome Driver\chromedriver.exe')