我试图编写一个将URL的三个组成部分(协议,位置和资源)组合到一个URL中的函数。
我有以下代码,它只能部分工作,返回的URL仅包含协议和资源组件,而没有位置组件。
代码:
from urllib.parse import urlparse
import os
def buildURL(protocol, location, resource):
return urllib.parse.urljoin(protocol, os.path.join(location,
resource))
Example: buildURL('http://', 'httpbin.org', '/get')
这将返回http:///get
。我试图调试它,以允许在URL中使用location参数。它应该返回http://httpbin.org/get
。
如何成功构建URL?
答案 0 :(得分:2)
这是因为您将/get
放在了os.path.join
中。您应该像buildURL('http://', 'httpbin.org', 'get')
这样称呼它。 os.path.join
会将/
视为从基本位置的根链接的绝对路径,它是join
函数的第一个参数:location
答案 1 :(得分:1)
您根本不应该在这里使用from selenium import webdriver
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
# Setup browser for
options = Options()
profile = webdriver.FirefoxProfile()
driver = Firefox(executable_path='geckodriver', options=options, firefox_profile=profile)
driver.get("https://agar.io")
#Xpaths
PLAY_BUTTON_XPATH = '//*[@id="play"]'
PROXY_DENIES_CONNECTION = '//*[@id="errorLongContent"]'
TIMEOUT_XPATH1 = '//*[@id="errorTryAgain"]'
#checking for error
def mainfunction():
while True:
print("Starting")
try:
if driver.find_element_by_xpath(PROXY_DENIES_CONNECTION).is_enabled() and driver.find_element_by_xpath(
PROXY_DENIES_CONNECTION).is_displayed():
print("Proxy denies connection")
driver.quit()
except:
pass
try:
if driver.find_element_by_xpath(TIMEOUT_XPATH1).is_enabled() and driver.find_element_by_xpath(
TIMEOUT_XPATH1).is_displayed():
print("Time out detected")
driver.quit()
except:
pass
try:
if driver.find_element_by_xpath(PLAY_BUTTON_XPATH).is_enabled() and driver.find_element_by_xpath(
PLAY_BUTTON_XPATH).is_displayed():
print("Agar.io server is loaded")
break
except:
pass
else:
continue
mainfunction()
。该模块用于文件系统路径,例如处理诸如os.path
和/usr/bin/bash
之类的事情。
不是用于构建URL。它们不受用户主机操作系统的影响。
相反,请使用C:\Documents and Settings\User\
中的urlunparse()
或urlunsplit()
:
urllib.parse