首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在0位置没有重复的MechanicalSoup

在0位置没有重复的MechanicalSoup
EN

Stack Overflow用户
提问于 2022-02-04 08:42:58
回答 1查看 76关注 0票数 0
代码语言:javascript
复制
    import argparse
from getpass import getpass
import mechanicalsoup

parser = argparse.ArgumentParser(description="Login to Northwest.1")
parser.add_argument("username")
args = parser.parse_args()

args.password = getpass("Please enter your Northwest password: ")

browser = mechanicalsoup.StatefulBrowser()

browser.open("https://thenorthwest.myatonce.com/login")
browser.select_form('#login-form')
browser["username"] = args.username
browser["password"] = args.password
resp = browser.submit_selected()
browser.follow_link("catalog")
browser.follow_link("?cl=45&gndr=65")
browser.launch_browser()

嗯,呃。我可以跟踪到目录的链接,https://thenorthwest.myatonce.com/catalog/,所以登录和转发到目录没有问题,但我不能遵循链接到指定的目录页。https://thenorthwest.myatonce.com/catalog/?cl=45&gndr=65有人能帮忙吗?

全错误代码和下方可能的闪击警报

代码语言:javascript
复制
    Traceback (most recent call last):
  File "C:\Users\emosc\PycharmProjects\achyls\main.py", line 14, in <module>
    browser.follow_link("login")
l_browser.py", line 354, in follow_link
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 324, in _find_link_internal
    return self.find_link(*args, **kwargs)
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 298, in find_link
    raise LinkNotFoundError()
mechanicalsoup.utils.LinkNotFoundError
PS C:\Users\emosc\PycharmProjects\achyls> py main.py anatoliawholesale
Please enter your Northwest password:
PS C:\Users\emosc\PycharmProjects\achyls> py main.py anatoliawholesale
Please enter your Northwest password: 
Traceback (most recent call last):
  File "C:\Users\emosc\PycharmProjects\achyls\main.py", line 18, in <module>
    browser.follow_link("?cl=45&gndr=64")
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 354, in follow_link
    link = self._find_link_internal(link, bs4_args,
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 324, in _find_link_internal
    return self.find_link(*args, **kwargs)
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 296, in find_link
    links = self.links(*args, **kwargs)
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 281, in links
    all_links = [a for a in all_links
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 282, in <listcomp>
    if re.search(url_regex, a['href'])]
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\re.py", line 200, in sea
rch
    return _compile(pattern, flags).search(string)
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\re.py", line 303, in _co
mpile
    p = sre_compile.compile(pattern, flags)
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_compile.py", line 76
4, in compile
    p = sre_parse.parse(p, flags)
 in parse
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_parse.py", line 443,
 in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_parse.py", line 668,
 in _parse
    raise source.error("nothing to repeat",
re.error: nothing to repeat at position 0
PS C:\Users\emosc\PycharmProjects\achyls> py main.py anatoliawholesale
Please enter your Northwest password:
PS C:\Users\emosc\PycharmProjects\achyls> py main.py anatoliawholesale
Please enter your Northwest password: 
Traceback (most recent call last):
  File "C:\Users\emosc\PycharmProjects\achyls\main.py", line 19, in <module>
    browser.follow_link("?cl=45&gndr=65")
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 354, in follow_link
    link = self._find_link_internal(link, bs4_args,
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 324, in _find_link_internal
    return self.find_link(*args, **kwargs)
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 296, in find_link
    links = self.links(*args, **kwargs)
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 281, in links
    all_links = [a for a in all_links
  File "C:\Users\emosc\PycharmProjects\achyls\venv\lib\site-packages\mechanicalsoup\statefu
l_browser.py", line 282, in <listcomp>
    if re.search(url_regex, a['href'])]
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\re.py", line 200, in sea
rch
    return _compile(pattern, flags).search(string)
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\re.py", line 303, in _co
mpile
    p = sre_compile.compile(pattern, flags)
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_compile.py", line 76
4, in compile
    p = sre_parse.parse(p, flags)
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_parse.py", line 948,
 in parse
    p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_parse.py", line 443,
 in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
  File "C:\Users\emosc\AppData\Local\Programs\Python\Python310\lib\sre_parse.py", line 668,
 in _parse
    raise source.error("nothing to repeat",
re.error: nothing to repeat at position 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-04 08:54:56

来自机械汤教程

Browser.follow_link(“窗体”) >>> browser.url 'http://httpbin.org/forms/post‘ 我们将正则表达式"forms"传递给follow_link(),后者跟踪文本与此表达式匹配的链接。还有许多其他的方法来调用follow_link(),但是我们会回到它。

这意味着,您作为第一个参数传递给follow_link的内容被视为模式。你做到了

代码语言:javascript
复制
browser.follow_link("?cl=45&gndr=65")

请注意,?在正则表达式中有着特殊的含义--零或前一件事之一。没有先前的事情,换句话说,在0位置没有什么可重复的。请尝试使用re.escape来缓解此问题,请按照以下方式,在import argparse之前添加import re,然后替换

代码语言:javascript
复制
browser.follow_link("?cl=45&gndr=65")

使用

代码语言:javascript
复制
browser.follow_link(re.escape("?cl=45&gndr=65"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70983541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档