小编Luc*_*pan的帖子

硒不能单击元素,因为其他元素使元素模糊

设定

我正在使用Python 3.x和Selenium填写查询字段,然后单击搜索按钮,

# element containing the product search bar and buttons
search_area = el_id('Products').find_element_by_class_name('searchArea')

# insert name of file to be duplicated
name_field = search_area.find_element_by_xpath("//input[@type='text']")
name_field.clear()
name_field.send_keys('to_be_duplicated')  

# click search button
search_area.find_element_by_xpath('span/a[1]').click()
Run Code Online (Sandbox Code Playgroud)

在哪里el_id(x) = browser.find_element_by_id(x)


问题

执行上面的代码会产生以下错误,

ElementClickInterceptedException: Element <a class="button button-fleft searchButton" href="#"> is not clickable at point (577.6166763305664,225.06666564941406) because another element <div class="blockUI blockOverlay"> obscures it
Run Code Online (Sandbox Code Playgroud)

我可以通过在抓取并单击按钮之前插入一个硬等待来解决此错误,就像这样,

# click search button
time.sleep(1)
search_area.find_element_by_xpath('span/a[1]').click()
Run Code Online (Sandbox Code Playgroud)

但是我宁愿以不同的方式解决它,所以我遵循了这个答案并做了以下工作,

# click search button
search_button = search_area.find_element_by_xpath('span/a[1]')
WebDriverWait(driver, 10).until_not(EC.visibility_of_element_located((By.XPATH, …
Run Code Online (Sandbox Code Playgroud)

python selenium element

9
推荐指数
3
解决办法
1万
查看次数

如何在 Spyder (Anaconda) 中找到当前 .py 文件的路径?

设置

我在我的计算机上运行一个脚本,位于目录Users/path/to/my/script.py.

在脚本中,我使用脚本的路径,例如,

sub_path = 'Users/path/to/my/'
os.chdir(sub_path + 'other_script/') 
Run Code Online (Sandbox Code Playgroud)

如您所见,我sub_path在代码中“手动”进行了定义。


问题

我不想sub_path手动定义,我宁愿让 Python 为我做。

我正在寻找类似于我用来获取当前工作目录的代码的东西:os.getcwd(),但是然后是获取当前文件目录的代码。

我主要找到类似于这个的答案,它说,

os.path.abspath(os.path.dirname(__file__))

但在 Spyder & Anaconda 设置中,这会生成NameError: name '__file__' is not defined.

我能做什么?

python spyder anaconda

5
推荐指数
1
解决办法
7213
查看次数

Pandas:在一个标题下将多列分组

设置

我有一个df由多列组成的熊猫数据框,标题如下,

| id | x, single room | x, double room | y, single room | y, double room |
--------------------------------------------------------------------------
   ?          ?               ?                 ?                 ?
Run Code Online (Sandbox Code Playgroud)


问题

我想按以下方式xy以标题开头和开头的列进行分组,

     |             x             |             y             |
--------------------------------------------------------------
| id | single room | double room | single room | double room |
--------------------------------------------------------------
   ?        ?             ?              ?             ?          
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

python header dataframe pandas

4
推荐指数
1
解决办法
5843
查看次数

使用 Selenium 通过 MacOS 窗口上传图像

设置

我正在使用 Python 3.x 和 Selenium 在网店的后端工作。

我需要在平台后端从我的计算机上传产品图片。


问题

使用 Selenium 可以单击图像上传按钮,但是单击会导致 MacOS 文件选择器弹出。

Selenium 不适用于 MacOS 文件选择器。我已经搜索了如何解决这个问题并找到了以下答案,

  1. /sf/answers/429062511/
  2. http://www.seleniumstutorial.com/uploading-a-file-in-selenium-with-python/
  3. /sf/answers/733077971/

但是,这些都不起作用。

按钮周围的 html 是,

<td class="control">


<div class="hide-input">
    <input data-val="true" data-val-required="The Image field is required." id="FileName" name="FileName" type="text" value="File636578585362423712.png">
</div>

<div id="uploadifive-FileNameUpload" class="uploadifive-button" style="height: 18px; line-height: 18px; overflow: hidden; position: relative; text-align: center; width: 50px;">Upload<input id="FileNameUpload" type="file" name="FileNameUpload" data-editor="#FileName" data-url="http://also-inc.demohoster.com/upload/uploadfile" data-path="~/UserFiles/Products/Images/" data-maxsize="10240" data-extensions="*.jpg;*.jpeg;*.png;*.gif;*.bmp;" data-thumbnailwidth="128" data-thumbnailheight="128" data-thumbnailpath="/UserFiles/Products/Images/Preview/" data-uniquename="True" data-preview="/UserFiles/Products/Images/Preview/File636578585362423712.png" data-isnew="false" data-auth="2CDE59B99D5F034087CA006254189C31F4388BA02DDE1CD1752A2FCFDE6EB556406CAF9D82DE4E02AC4D7D9813E2CF8B2A1413EF7CE8CA22FDD9822130B4EC239F1BD305F8AA1E5F6E9EFD1CD64138B8A621A88A675A3A528B7DF2F0388C36C473CBAD080CF826A28A3464FB719D039690241E38" data-session="jx134u0kcaxfu4jz1darurvg" class="file-uploader hide-input" style="display: none;"><input type="file" style="font-size: 18px; opacity: …
Run Code Online (Sandbox Code Playgroud)

python selenium image key

4
推荐指数
1
解决办法
1939
查看次数

按字符串日期对 pandas 数据框进行排序而不进行转换

设置

我有一个数据框,其中有一列包含字符串中的日期。

日期格式为日/月/年,例如 05/12/2018。

数据test_df框看起来像,

   date_created
0    05/12/2018
1    04/12/2018
2    04/12/2018
3    03/12/2018
4    02/12/2018
5    30/11/2018
6    30/11/2018
7    30/11/2018
8    30/11/2018
9    29/11/2018
10   02/12/2018
11   29/11/2018
12   29/11/2018
Run Code Online (Sandbox Code Playgroud)

问题

我希望按日期对此进行排序,这样我就可以,

   date_created
0    05/12/2018    
1    04/12/2018
2    04/12/2018
3    03/12/2018
10   02/12/2018    
4    02/12/2018
5    30/11/2018
6    30/11/2018
7    30/11/2018
8    30/11/2018
9    29/11/2018
11   29/11/2018
12   29/11/2018
Run Code Online (Sandbox Code Playgroud)

但按照这个例子

test_df.sort_values(by='date_created', inplace=False, ascending=True)

给出,

   date_created
4    02/12/2018
10   02/12/2018
3    03/12/2018
1    04/12/2018
2 …
Run Code Online (Sandbox Code Playgroud)

python sorting datetime pandas

3
推荐指数
1
解决办法
4984
查看次数

Scrapy:命令以覆盖先前的导出文件

设定

我通过终端(Mac OS)中的标准命令将数据导出到.csv文件

scrapy crawl spider -o spider_ouput.csv 
Run Code Online (Sandbox Code Playgroud)

问题

导出新的spider_output.csvScrapy时,会将其追加到现有的spider_output.csv

我可以想到两种解决方案,

  1. 命令Scrapy覆盖而不是附加
  2. 命令终端spider_output.csv在爬网之前删除现有的

我已经读到(令我惊讶)Scrapy目前无法执行1。有些人提出了解决方法,但是我似乎无法使其正常工作。

我找到了解决方案2 的答案,但也无法使其正常工作。

有人可以帮我吗?也许我没有想到过第三个解决方案?

python export overwrite scrapy

2
推荐指数
1
解决办法
1196
查看次数

将 X 天添加到 BASH 中的特定日期

对 BASH 来说是全新的。提前道歉。


问题

我想将 X 天添加到特定日期。


代码

我发现date在 BASH 中检索当前日期。

我还发现我可以通过以下方式将 X 天添加到当前日期,

expiration_date=$ date -v +1d
Run Code Online (Sandbox Code Playgroud)

这使,

Tue Sep 26 20:28:13 CEST 2017 
Run Code Online (Sandbox Code Playgroud)

这确实是写作日期加上X=1天数。


date我想插入一个特定的日期,而不是在上面的命令行中添加 X 天,例如 20/09/2017。

不要关心特定日期的格式。

换句话说:我如何进行以下工作,

expiration_date=$ '20/09/2017' -v +1d
Run Code Online (Sandbox Code Playgroud)

试过这个答案,但没有做我想要的。


编辑:不知道 OSX 的情况有所不同。

macos bash date

2
推荐指数
1
解决办法
5347
查看次数

在 MAC OSX 中比较 Bash 中的两个日期

我是 Bash 的新手,提前道歉。


设置

我有一个特定的结束日期end,这取决于特定的开始日期s和周期长度,p例如,end=s+p.


问题

当且仅当今天的日期早于或等于结束日期时,我想执行命令。

即:执行命令 iff date ? end


代码

s='20/09/2017'
p='1'
end=$( date -j -v +"$p"d -f "%d/%m/%Y" "$s")

if [[ date < “$end” ]];
then
   echo 'ok'
fi
Run Code Online (Sandbox Code Playgroud)

有两件事不应该是这样,

  1. p=1暗示end = '21/09/2017'< date = '26/09/2017',但我仍然得到一个ok.
  2. 我用date < “$end”但我想要date ? “$end”

如何纠正1和2?

macos bash date

2
推荐指数
1
解决办法
1692
查看次数

用Selenium迭代tr中的tr

建立

我的WordPress后端有一个表有几行.每行包含一个我想用Selenium打开的链接.

也就是说,我想遍历每个<tr><tbody>.

browser 被定义为,

browser = webdriver.Firefox(executable_path='mypath')

<tbody>具有通常的形式,

 <tbody>
    <tr>...</tr>
    ...
    <tr>...</tr>
 </tbody>
Run Code Online (Sandbox Code Playgroud)

代码到目前为止

  • <tr>

导航到正确的页面后,

tbody = browser.find_element_by_css_selector('.widefat > tbody:nth-child(2)')

browser.find_element_by_xpath('//*[@title="Dutch: Add translation"]').click()
Run Code Online (Sandbox Code Playgroud)

<tbody>元件被正确地选择,并且所述第一的右连杆<tr>被正确地打开.

  • 遍历<tr>

我不知道如何成功地将其循环到所有<tr><tbody>.

我试过以下,

tbody = browser.find_element_by_css_selector('.widefat > tbody:nth-child(2)')

for row in tbody.find_element_by_xpath('./tr'):
    browser.find_element_by_xpath('//*[@title="Dutch: Add translation"]').click()
Run Code Online (Sandbox Code Playgroud)

但这给了TypeError: 'FirefoxWebElement' object is not iterable.

显然,tbody.find_element_by_xpath('./tr')这不是选择所有人的正确方法<tr>.

如何<tr>正确选择全部?

python selenium

2
推荐指数
1
解决办法
1108
查看次数

Python 网页抓取:睡眠和请求之间的区别(页面,超时 = x)

在循环中抓取多个网站时,我注意到之间的速度差异很大,

sleep(10)
response = requests.get(url)
Run Code Online (Sandbox Code Playgroud)

和,

response = requests.get(url, timeout=10)
Run Code Online (Sandbox Code Playgroud)

也就是说,timeout速度要快得多。

此外,对于这两种设置,我预计在请求下一页之前每页的抓取持续时间至少为 10 秒,但事实并非如此。

  1. 为什么速度相差这么大?
  2. 为什么每页抓取时长不到 10 秒?

我现在使用多处理,但我认为要记住上述内容也适用于非多处理。

python sleep screen-scraping timeout difference

1
推荐指数
1
解决办法
6293
查看次数

导入自定义函数

设置

我有2个.py在2个不同地点,即文件'mypath/folder_A''mypath/folder_B'

文件A.py包含 2 个需要导入到B.py.

A.py 好像,

def test_function_1(x):
    y = x + 1
    return y

def test_function_2(x):
    y = x + 2
    return y
Run Code Online (Sandbox Code Playgroud)

B.py模样,

os.chdir('/mypath/folder_A')
import A

test_function_1(1)
test_function_2(1)
Run Code Online (Sandbox Code Playgroud)

问题

当我跑步时B.py,我得到了NameError: name 'test_function_1' is not defined

但如果我适应B.py了,

from A import test_function_1, test_function_2
Run Code Online (Sandbox Code Playgroud)

并运行B.py,它的工作原理。


如何将函数从A.pyinto 导入B.py而不必全部命名?

即有from A import everything吗?

python

1
推荐指数
1
解决办法
54
查看次数

在短代码中动态插入 WooCommerce 产品 ID

设置

我有一个带有 Elementor 的 WooCommerce 商店。

我正在使用 Elementor 单一产品页面模板来生成每个产品的产品页面。

我想使用这个插件在每个产品页面上显示经常一起购买 (FBT) 元素。

为了显示 FBT 元素,插件的创建者提供了以下短代码:[premmerce_get_bundles_by_main_product_id id="X"],其中X是 WooCommerce 产品 ID。


问题

X动态的。

如果我在短代码中填写例如产品的产品 ID ,Elementor 产品页面模板将显示我的每个产品2的 FBT 产品。2


问题

可以做X动态吗?优选地,X自动将其设置为正在访问哪个页面的产品的id。

php wordpress woocommerce

0
推荐指数
1
解决办法
3619
查看次数