2015-12-10 3 views
3

Я пытаюсь автоматизировать тестовые формы, которые селен будет занимать слишком много времени (тяжелые современные формы javascript), и я хочу использовать xdotool и получить идентификаторы окон. Я вижу, вы можете позвонить xdotool selectwindow и щелкнуть по нему, но тогда вы должны щелкнуть его каждый раз. Я хочу сказать, это «для Google Chrome окна, где заголовок вкладки х, сделать у»Как получить идентификатор окна для xdotool автоматически

я получил окно ID здесь:

[email protected]:~$ xdotool selectwindow 
65011713 

Это для самого хрома, каждая вкладка получает одинаковое значение при нажатии. Таким образом, я ожидал, чтобы найти, что в пс или оконного менеджера, но нет:

[email protected]:~$ wmctrl -l 
0x03a00001 0 cchilders-Dell-Precision-M3800 views.py - /home/cchilders/work_projects - Atom 
0x03a00048 0 cchilders-Dell-Precision-M3800 pip_freeze_update.py - /home/cchilders/scripts - Atom 
0x03a000bc 0 cchilders-Dell-Precision-M3800 urls.py - /home/cchilders/work_projects - Atom 

и не делает пс работы:

(clientsite)[email protected]:~$ ps -alx 
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY  TIME COMMAND 
4  0  1  0 20 0 185188 5752 ep_pol Ss ?   0:06 /sbin/init splash 
1  0  2  0 20 0  0  0 kthrea S ?   0:00 [kthreadd] 
1  0  3  2 20 0  0  0 smpboo S ?   0:02 [ksoftirqd/0] 
1  0  5  2 0 -20  0  0 worker S< ?   0:00 [kworker/0:0H] 
1  0  7  2 20 0  0  0 rcu_gp S ?   1:10 [rcu_sched] 
1  0  8  2 20 0  0  0 rcu_gp S ?   0:00 [rcu_bh] 
...etc... 

нигде не 65011713 обнаружиться. Xdotool - отличный инструмент, но обработка окон предполагает, что вы многое знаете о окнах, и из того, что я помню, чтобы использовать его раньше, в разделе WINDOW COMMANDShttps://www.semicomplete.com/projects/xdotool/xdotool.xhtml#window_commands есть много способов найти окно, о котором вы знаете много, но не так много, чтобы автоматизировать получение этой информации о окне. Как я могу определить идентификатор окна (формат xdotool хочет) автоматически, скажем, путем подачи сценария начальной части URL-адреса? Спасибо

Вы можете посмотреть на Google Chrome в wmtrl:

и захватить первое число, разделенных пробелом в целое:

In [13]: int("0x03e00001", 16) 
Out[13]: 65011713 

16 флаг в междунар говорит, что ожидать шестнадцатеричной

In [14]: int("0x03e00001") 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-14-96517b980767> in <module>() 
----> 1 int("0x03e00001") 

ValueError: invalid literal for int() with base 10: '0x03e00001' 
+1

'65011713' - двоичное значение. Значения, возвращаемые из 'wmctrl', являются шестнадцатеричными значениями. Вам нужно будет преобразовать их, чтобы они соответствовали (хотя ни один из этих трех не делает, но потом я вообще не вижу «хром» в этом списке). Однако ничего в 'ps' здесь не имеет значения. Если вы не можете получить индивидуальные идентификаторы окон для вкладок, хотя (и, возможно, вам не удастся), вы, вероятно, не сможете настроить таргетинг на вкладку (или обязательно даже ** увидеть ** вкладки с помощью 'xdotool' в первом место).(Возможно, стоит посмотреть на результат из 'xwininfo -tree', чтобы узнать, можете ли вы найти то, что вы ищете там.) –

+0

да, это правильно, это хлопот, но он его решает. – codyc4321

+0

фраза ваша как вопрос, если вы хотите, чтобы я выбрал его. и я чуть не потерял свою селезенку наизнанку из чувака, чтобы закрыть что-то конкретное. <3 SO – codyc4321

ответ

1

Вы можете использовать awk для извлечения ID из выходного wmctrl -l.

Например:

wmctrl -l | awk '/Google Chrome/ {print $1}' 

xdotool, вероятно, считать, что идентификаторы шестигранные только штраф, но если он не может вы можете преобразовать его в десятичное представление с strtonum:

wmctrl -l | awk '/Google Chrome/ {print strtonum($1)}' 

Как вы подходите только Окно, которое вы хотите с вывода в awk зависит от вас и ваших требований.

Возможно, стоит отметить, что xdotool также имеет команду search, которая принимает всевозможные спецификаторы и шаблоны, которые вы можете использовать для получения идентификатора окна окон, над которыми вы хотите работать. (Он даже поддерживает стек совпадений, который поддерживает специальный формат «идентификатора окна» для непосредственного использования «цепных команд».)