Как я могу заставить свой setup.py использовать относительный путь для моих файлов?

На веб-сайте я нажимаю кнопку, которая открывает небольшое подокно

blockquote>

Здесь вы упомянули, что открываете новое подокно, в котором нужно нажать кнопка для скачивания. Но вы не переключаетесь на это окно. Следовательно, не в состоянии найти этот элемент.

Используйте driver.window_handles, чтобы получить указатель на открытое окно и переключитесь на это окно, используя driver.switch_to_window(), затем попробуйте нажать на кнопку, чтобы загрузить.

Вы можете увидеть, как обрабатывать несколько окон в python selenium в этом стековом потоке , ссылка .

РЕДАКТИРОВАТЬ:

Так что, похоже, в вашем коде были некоторые проблемы. Как и локатор для кнопок загрузки рядом с шахматной доской и одна после этого были неправильными. Я исправил локатор с помощью правильного xpath, а также внес небольшие изменения в chrome_options. Вам просто нужно изменить download.defualt_directory на путь в вашем компьютере, и код ниже будет работать:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()

chrome_options.add_experimental_option("prefs", {
  "download.default_directory": r"C:\Users\Thanthu Nair\Downloads\Test",
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})
driver = webdriver.Chrome("./chromedriver", options=chrome_options)

website = "https://www.chess.com/ccc"
driver.get(website)  # loads the page
driver.maximize_window()

# This closes a sub-window that opens automatically
element = driver.find_element_by_class_name("form-button-component")
element.click()

download = driver.find_element_by_xpath("//i[@title='Download']")
download.click()

# Click to download
download.find_element_by_xpath("//button[normalize-space()='Download Game (PGN)']").click()
12
задан Chris B. 1 May 2009 в 17:00
поделиться

4 ответа

Это обходной путь, но я бы, вероятно, просто использовал Makefile, который перезапустил ./mypackage в ./build/mypackage, а затем использовал бы обычный синтаксис distutils изнутри ./build. Дело в том, что distutils ожидает распаковать файл setup.py в корень sdist и иметь там код, так что у вас будет чертовски много времени, чтобы убедить его поступить иначе.

Вы всегда можете обнулить копию, когда очистить, чтобы вам не пришлось испортить ваш VCS.

0
ответ дан 2 December 2019 в 22:23
поделиться

Какую структуру каталогов вы хотите получить внутри файла архива распространения? Так же, как ваша существующая структура?

Вы можете упаковать все на один каталог выше (код в вашем примере) с этим измененным setup.py:

from distutils.core import setup

setup(
    name = 'MyPackage',
    description = 'This is my package',
    packages = ['mypackage', 'mypackage.subpackage'], 
    version = '1',
    url = 'http://www.mypackage.org/',
    author = 'Me',
    author_email = 'me@here.com',
    script_name = './build/setup.py',
    data_files = ['./build/setup.py']
)

You запустили бы это (в code directory):

python build/setup.py sdist

Или, если вы хотите сохранить dist внутри сборки:

python build/setup.py sdist --dist-dir build/dist

Мне нравится структура каталогов, которую вы пытаетесь найти. Я никогда не думал, что setup.py был достаточно особенным, чтобы гарантировать нахождение в папке корневого кода. Но, нравится вам это или нет, я думаю, что именно этого ожидают пользователи вашего дистрибутива. Поэтому неудивительно, что вы должны обмануть distutils, чтобы сделать что-то еще. Параметр data_files - это хак, чтобы получить ваши настройки.

6
ответ дан 2 December 2019 в 22:23
поделиться

Возможно, сначала он поменяется на родительский каталог?

import os
os.chdir(os.pardir)

from distutils.core import setup

и т. Д.

Или, может быть, вы запускаете его из любого места (это излишне, но ...):

import os.path
my_path = os.path.abspath(__file__)
os.chdir(os.normpath(os.path.join(my_path, os.pardir)))

и др. Не уверен, что это работает, но это должно быть легко попробовать.

2
ответ дан 2 December 2019 в 22:23
поделиться

Запустите setup.py из корневой папки проекта

В вашем случае поместите setup.py в код / ​​

код / ​​также должен включать:

  • LICENSE.txt
  • README.txt
  • INSTALL.txt
  • TODO.txt
  • CHANGELOG.txt

Когда вы запускаете setup.py sdist, он должен автоматически сгенерировать МАНИФЕСТ, включающий: - любые файлы, указанные в py_modules и / или пакетах - setup.py - README.txt

Чтобы добавить больше файлов, просто вручную отредактируйте файл МАНИФЕСТА, чтобы включить в него любые другие файлы, которые нужны вашему проекту.

Для приличного объяснения этого прочтите этот .

Чтобы увидеть рабочий пример оформления заказа мой проект .

Примечание. Я не передаю МАНИФЕСТ в управление версиями, поэтому вы не найдете его там.

2
ответ дан 2 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: