N 个函数调用后的睡眠装饰器 Python/Selenium

2024-01-10

使用 Python/Selenium,我定义了一个休眠装饰器,在 Web 抓取项目的 5 个函数调用(对服务器的请求)之间等待 20 秒,这样我就不会压垮他们的服务器。查看终端输出,它似乎按照我的预期工作,但是当我在创建输出文件“Hitachi.csv”时观察它时,它似乎没有在第五个网址处暂停,而是在最后,引导我相信昏昏欲睡的装饰器在第五次调用时不会暂停。请帮忙:)

def sleepy(f):
    def wrapped(*args, **kwargs):
        wrapped.calls += 1
        print(f"{f.__name__} called {wrapped.calls} times")
        if wrapped.calls % 5 == 0:
            print("Sleeping...")
            sleep(20)
        return f(*args, **kwargs)

    wrapped.calls = 0

    return wrapped
# script_concurrent.py

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from concurrent.futures import ThreadPoolExecutor, wait
from time import sleep, time
from selenium import webdriver
import datetime
import os

from scrapers.scraper import connect_to_base, parse_html, write_to_file


def counted(f):
    def wrapped(*args, **kwargs):
        wrapped.calls += 1
        return f(*args, **kwargs)

    wrapped.calls = 0

    return wrapped


def sleepy(f):
    def wrapped(*args, **kwargs):
        wrapped.calls += 1
        print(f"{f.__name__} called {wrapped.calls} times")
        if wrapped.calls % 5 == 0:
            print("Sleeping...")
            sleep(20)
        return f(*args, **kwargs)

    wrapped.calls = 0

    return wrapped


@counted
@sleepy
def run_process(filename="Hitachi.csv"):

    # init browser
    os.environ["WDM_LOG_LEVEL"] = "0"
    browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

    if connect_to_base(browser):
        sleep(2)
        html = browser.page_source
        output_list = parse_html(html)
        write_to_file(output_list, filename)
    else:
        print("Error connecting to AVS")

    # exit
    browser.quit()


if __name__ == "__main__":

    start_time = time()
    output_timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    output_filename = f"output_{output_timestamp}.csv"

    futures = []

    with ThreadPoolExecutor() as executor:
        futures.extend(executor.submit(run_process) for _ in range(2, 12))

    wait(futures)
    end_time = time()
    elapsed_time = end_time - start_time
    print(f"Elapsed run time: {elapsed_time / 60:.2f} minutes.")
    print(f"Calls to run_process: {run_process.calls}")

# scraper.py

import requests
import csv
from pathlib import Path
import itertools
import pandas as pd
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent


def csv_to_iter(filename, idx=0):
    pd.set_option("display.max_rows", None)
    df = pd.read_csv(filename)
    df = df.iloc[:, [idx]]
    df = df.values.tolist()
    df = list(itertools.chain(*df))
    df = sorted(list(set(df)))
    return iter(df)


my_iter = csv_to_iter(
    filename="/Users/myusername/Downloads/Code/AVS-concurrent-web-scraping/Sorted_MAH_Hitachi_urls.csv"
)


def connect_to_base(browser):
    my_next_iter = next(my_iter)
    connection_attempts = 0
    while connection_attempts < 3:
        try:
            browser.get(my_next_iter)
            # wait for table element with id = 'content' to load
            # before returning True
            WebDriverWait(browser, 5).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, ".container"))
            )
            return True
        except Exception as e:
            print(e)
            connection_attempts += 1
            print(f"Error connecting to {my_next_iter}.")
            print(f"Attempt #{connection_attempts}.")
    return False


def parse_html(html):
    # create soup object
    soup = BeautifulSoup(html, "html.parser")
    # parse soup object to get wikipedia article url, title, and last modified date
    # part_position = [
    #     item.text.strip() for item in soup.findAll("td", {"data-title": "Pos."})
    # ]
    part_number_1 = [
        item.text.strip() for item in soup.findAll("td", {"data-title": "Part â„–"})
    ]
    part_number_2 = [
        item.text.strip() for item in soup.findAll("td", {"data-title": "Part №"})
    ]

    if not part_number_1:
        pass
    else:
        part_number = part_number_1

    if not part_number_2:
        pass
    else:
        part_number = part_number_2

    part_qty = [item.text.strip() for item in soup.findAll("td", {"data-title": "Qty"})]

    part_name = [
        item.text.strip() for item in soup.findAll("td", {"data-title": "Part name"})
    ]

    part_comments = [
        item.text.strip() for item in soup.findAll("td", {"data-title": "Comments"})
    ]

    machine = [
        item.text.split()[0] for item in soup.findAll("article", {"id": "node-content"})
    ]

    alternative_machines = [
        item.text.split()[2] for item in soup.findAll("article", {"id": "node-content"})
    ]

    title = [item.text for item in soup.findAll("span", {"class": "trans"})]

    parts_group = [item.h3 for item in soup.findAll("div", {"class": "card-header"})]

    article_info = {
        # "Pos.": part_position,
        "Part No": part_number,
        "Qty": part_qty,
        "Parts name": part_name,
        "Comments": part_comments,
        "Machine": machine,
        "Alternative_machines": alternative_machines,
        "Title": title,
        "Parts_group": parts_group,
    }

    return [article_info]


def get_load_time(article_url):
    try:
        # set headers
        headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
        }
        # make get request to article_url
        response = requests.get(
            article_url, headers=headers, stream=True, timeout=3.000
        )
        # get page load time
        load_time = response.elapsed.total_seconds()
    except Exception as e:
        print(e)
        load_time = "Loading Error"
    return load_time


def write_to_file(output_list, filename="Hitachi.csv"):
    for row in output_list:
        with open(Path(BASE_DIR).joinpath(filename), "a") as csvfile:
            fieldnames = [
                "Pos.",
                "Part No",
                "Qty",
                "Parts name",
                "Comments",
                "Machine",
                "Alternative_machines",
                "Title",
                "Parts_group",
            ]
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            writer.writerow(row)

Output

run_process called 1 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,433 INFO ====== WebDriver manager ======
run_process called 2 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,439 INFO ====== WebDriver manager ======
run_process called 3 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,440 INFO ====== WebDriver manager ======
run_process called 4 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,450 INFO ====== WebDriver manager ======
run_process called 5 times
Sleeping...
run_process called 6 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,461 INFO ====== WebDriver manager ======
run_process called 7 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,467 INFO ====== WebDriver manager ======
run_process called 8 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:45:59,477 INFO ====== WebDriver manager ======
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,690 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,690 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,720 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,720 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,733 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,733 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,789 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,790 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,793 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,793 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,798 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,798 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,807 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:45:59,807 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:45:59,868 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:45:59,909 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:45:59,946 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:45:59,974 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:46:00,007 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:46:00,016 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:46:00,038 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache

[WDM] - ====== WebDriver manager ======
2022-07-10 14:46:19,459 INFO ====== WebDriver manager ======
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:46:19,552 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:46:19,552 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:46:19,647 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
run_process called 9 times

[WDM] - ====== WebDriver manager ======
2022-07-10 14:46:42,827 INFO ====== WebDriver manager ======
[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:46:43,131 INFO Current google-chrome version is 103.0.5060
[WDM] - Get LATEST chromedriver version for 103.0.5060 google-chrome
2022-07-10 14:46:43,131 INFO Get LATEST chromedriver version for 103.0.5060 google-chrome
[WDM] - Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
2022-07-10 14:46:43,745 INFO Driver [/Users/myusername/.wdm/drivers/chromedriver/mac64/103.0.5060.53/chromedriver] found in cache
run_process called 10 times
Sleeping...

Data

0
https://spare.avspart.com/catalog/hitachi/101:uh02/06e2437d-a240-49d0-ac8d-fc553bff6c53/
https://spare.avspart.com/catalog/hitachi/101:uh02/0d79c019-4621-4a47-8127-bd7baa5f0c0b/
https://spare.avspart.com/catalog/hitachi/101:uh02/1a7f894f-c1b8-456b-8ed3-bf78c60e4a71/
https://spare.avspart.com/catalog/hitachi/101:uh02/1c6fe013-e139-4112-81a5-c01fc4591803/
https://spare.avspart.com/catalog/hitachi/101:uh02/1d07c2a9-d4f8-4b50-a6bc-e64951cd7e8e/
https://spare.avspart.com/catalog/hitachi/101:uh02/2780b803-2f37-4777-a5c6-97ea9e54137d/
https://spare.avspart.com/catalog/hitachi/101:uh02/3aa2c54f-154e-4aae-8f2a-efb05b471bfa/
https://spare.avspart.com/catalog/hitachi/101:uh02/3c0b42bb-c6c9-4f60-8c2e-d5258a703d76/
https://spare.avspart.com/catalog/hitachi/101:uh02/47a76d4e-70b0-4b6d-9308-67b91a4619ad/
https://spare.avspart.com/catalog/hitachi/101:uh02/540f4b09-795a-41de-9715-8825e296018b/
https://spare.avspart.com/catalog/hitachi/101:uh02/57cefeb3-9dd2-4f99-a552-50dc452b6565/
https://spare.avspart.com/catalog/hitachi/101:uh02/58c4d3b6-9a15-4be0-8082-19980c2119fe/
https://spare.avspart.com/catalog/hitachi/101:uh02/5b2f40e4-a61f-4a3d-a15f-a41659595b28/
https://spare.avspart.com/catalog/hitachi/101:uh02/5b2f40e4-a61f-4a3d-a15f-a41659595b45/

The run_process called and Sleeping...看起来确实是有组织的,但如果你仔细观察,你会发现几乎所有的打印输出

[WDM] - Current google-chrome version is 103.0.5060
2022-07-10 14:45:59,690 INFO Current google-chrome version is 103.0.5060

在。。。之间run_process called 8 and run_process called 9.

此信息来自

webdriver.Chrome(service=Service(ChromeDriverManager().install()))

实际工作在哪里。

原因是使用ThreadPoolExecutor, run_process()同时执行 10 次,即使打印输出另有指示(您不能指望它的顺序,因为打印到控制台不同步)。

你可以加lock in sleepy在等候区

def sleepy(f):
    def wrapped(*args, **kwargs):
        with lock:
            wrapped.calls += 1
            print(f"{f.__name__} called {wrapped.calls} times")
            if wrapped.calls % 5 == 0:
                print("Sleeping...")
                sleep(20)
        return f(*args, **kwargs)

    lock = threading.Lock()
    wrapped.calls = 0

    return wrapped
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

N 个函数调用后的睡眠装饰器 Python/Selenium 的相关文章

  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 更改 WCF 服务以与 .NET Framework 和 .NET Core 调用方兼容

    TL DR我有一个作为 Windows 服务托管的现有 WCF 服务 我想对其进行修改 以便现有的 NET Framework 4 7 应用程序以及新的 NET Core 2 2 应用程序可以调用它 解决这个问题最简单的方法是什么 完整说明
  • iOS - Alamofire v2 基本身份验证不起作用

    因此 我向 Bing 图像搜索发送基本身份验证请求以获取一些图像数据 它运行得很好 直到我更新到最新版本的 Alamofire 1 3 gt 2 0 2 我必须这样做 因为1 3 甚至与 XCode 7 几乎不兼容 无论如何 这是我的代码
  • 如何取消微过滤器驱动程序中的重命名操作

    我想取消微过滤器中的重命名操作 我已经写了 检测文件何时被重命名的代码 但我不清楚如何 实际上取消操作 谁能帮我解决这个问题吗 这是我的回调例程 用于检测文件重命名 FLT PREOP CALLBACK STATUS PreSetInfor
  • Angular UI 网格滚动错误

    我正在使用 ui grid 3 0 6 直到昨天 它都运行良好 但是现在Google chrome有问题 版本56 0 2924 87 当我滚动网格或单击向下滚动箭头时 它开始快速滚动 无法控制速度 它运行良好 并且仅在 Chrome 中运
  • Linux Kernel 4.2中如何获取当前进程的UID和EUID?

    正如 LDD3 第 6 章 p175 所示 我们可以通过以下方式获取当前进程 UID 和 EUIDcurrent gt uid and current gt euid 但定义struct task structLinux Kernel 4
  • 为什么查看页面源代码与检查页面元素不同[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 好吧 我在我的项目中经常使用 Producteev com 前几天我注意到在我的工作区页面上 页面的源代码 Ctrl U 非常短 并且
  • React Router v4 中的 hashHistory 在哪里?

    我正在尝试为我的 React 应用程序使用路由器 我尝试了一段时间之前一直在使用的东西 但似乎无法启动 有hashHistory在 React Router v4 中被删除 重新格式化
  • 在酶中使用 id 进行包装器查找,并且玩笑未找到元素

    我是 Jest 和 Enzyme 测试的新手 我想知道为什么 find 函数不能与 id 一起使用 来自react的html 只是id增量的代码 div div div div
  • LL 解析器比 LR 解析器有什么优势?

    LL 解析器相对于 LR 解析器有什么优势来保证它们在当今的解析器生成器工具 http en wikipedia org wiki Comparison of parser generators 根据维基百科 http en wikiped
  • 使用 Bluehost 帐户设置 PHPMailer

    我尝试联系 Bluehost 的支持人员 但他们不知道如何设置 我所做的是首先创建我的电子邮件帐户 VPS 帐户 然后获取我的电子邮件设置的所有详细信息 电子邮件设置 邮件服务器用户名 电子邮件受保护 cdn cgi l email pro
  • golang反映值类型的切片

    fmt Println v Kind fmt Println reflect TypeOf v 如何找出切片的反射值的类型 上面的结果是 v Kind slice typeof reflect Value 当我尝试Set如果我创建了错误的切
  • 使用 C# 循环遍历屏幕上给定标签 WP7 的所有按钮

    我正在寻找一种简单的方法来循环浏览屏幕上给定标签的所有按钮 例如 富 我正在使用 WP7 使用 C 我对这个平台很陌生 所以对我要轻松一些 P 谷歌搜索这类事情对我来说也不太有效 我认为我的术语是错误的 所以任何关于这方面的提示也将不胜感激
  • CakePHP 应用程序部署

    我有兴趣了解人们如何部署他们的 CakePHP 应用程序 最近有人联系我做一些自由的 CakePHP 开发 这对我来说是一个在表示层获得一些经验的好机会 在我的 FT 工作中 我在业务层和持久层进行 Java EE 开发 此时我的想法有点混
  • 动态加载控制器和 ng-include

    目前我有一个有侧边栏的应用程序 侧边栏使用以下方式加载不同的html模板ng include基于用户选择执行的操作 这是一个与地图相关的应用程序 例如 如果用户选择 添加航段 按钮 它将加载add leg html使用模板将其放入侧边栏ng
  • Android数据存储在xml中

    我有一个网络平台 用于存储我正在构建的应用程序的数据 Web 平台是使用 Ruby on Rails 构建的 主要应用程序适用于 Android 我很想知道将数据存储在 XML 文件 对于 Android 应用程序 中的任何性能问题 最终
  • Swift:如何在登录视图后显示选项卡栏控制器

    我在这里看到了很多与此类似的帖子 但它们都是关于 Objective C 而我正在用 Swift 开发我的应用程序 正如您从图像中看到的 我有一个登录屏幕视图 并且我正确地实现了登录机制 现在我希望登录成功后 显示选项卡栏控制器 在我的登录
  • 我可以将 tf.map_fn(...) 应用于多个输入/输出吗?

    a tf constant 1 2 3 4 5 6 b tf constant True False dtype tf bool a eval array 1 2 3 4 5 6 dtype int32 b eval array True
  • 无法在 Elasticsearch 中注册快照存储库

    我正在使用 Elasticsearch 1 4 和 ubuntu 12 04 3 LTS 尝试为本地 elasticsearch 创建快照 我参考这个website http www elasticsearch org guide en e
  • TYPO3:如何在后端添加css和JS

    我该如何添加css and javascript后端有文件吗 我想将这些文件用于自定义创建的内容元素以使它们对用户更具吸引力 System TYPO3 v9 Mode 作曲家模式 Target 自定义内容元素 在 TYPO3 v9 中 您必
  • N 个函数调用后的睡眠装饰器 Python/Selenium

    使用 Python Selenium 我定义了一个休眠装饰器 在 Web 抓取项目的 5 个函数调用 对服务器的请求 之间等待 20 秒 这样我就不会压垮他们的服务器 查看终端输出 它似乎按照我的预期工作 但是当我在创建输出文件 Hitac