2016-09-30 5 views
1

Ich versuche zu lernen, wie man Skript in Python mit Selen machen. Die meiste Zeit habe ich mit "statischem Element" geübt, aber jetzt möchte ich einige Elemente auswählen, die eine dynamische ID haben, aber das Problem ist, dass ihre ID keinen partiellen statischen Teil hat.So finden Sie diese Art von Element mit Selen

aber sie haben eine andere „id“, statische diesmal aber ich weiß nicht, wie es mit Selen in Python zu verwenden, ich habe versucht, zwei verschiedene Dinge, aber Selen ist nicht auf dieses Element

Dieser einen Teil finden des Elements:

<div class="table-cell show-plus" ng-class="{'show-plus': !user.deleted &amp;&amp; (authentication.user.isManager || user.isMe) &amp;&amp; (!group.isExchange || !ctrl.isPast(day)), 'no-events': !_events.length, 'is-today': day === ctrl.todayString}" ng-repeat="day in ctrl.currentDays" ng-click="ctrl.addShift(user, day, false, group.grouping, group.isExchange, group.key)" lvl-drop-target="true" on-drop="ctrl.dropped(dragEl, dropEl, event, 'week')" data-user-id="30308" data-is-exchange="false" data-shift-date="2016-09-29" id="5aa270ea-180f-2861-c97a-506c76cee386"><!----><div data-shift-id="134514" data-is-exchange="false" ng-repeat="event in ::(_events = (user.events[day] | filter:ctrl.filterOutMultiday | orderBy:['sort', 'dtstart'])) track by event.key" lvl-draggable="true" augment-draggable="" class="shift s12B835 published can-be-selected" ng-class="::{ 
       leave: event.type === 'leave', 
       staging: event.status === 'planning', 
       cancelled: event.cancelled, 
       openend: event.isOpenEnded, 
       published: event.status === 'published', 
       unpublished: event.status !== 'published', 
       unavailability: event.type === 'availability', 
       'can-be-selected': event.canBeSelected 
      }" draggable="true" id="c9d08710-daef-cdf7-9d7b-c4ceb13541a6"><!----><div class="shift-selection" ng-click="ctrl.stopEventPropagation($event)" ng-if="::event.canBeSelected"><div class="checkmark-wrapper"><label class="checkmark"><input type="checkbox" ng-model="ctrl.selectedEvents[event.id]" ng-change="ctrl.selectionChanged()" class="ng-pristine ng-untouched ng-valid ng-empty"> <span></span></label></div></div><!----><div class="shift-details" ng-click="ctrl.openShift(event, group.isExchange, $event)" ng-class="{'right-icon': event.showOfferedShiftIcon || event.showAvailableShiftIcon || event.showTimeoffIcon}"><div class="ellipsis" title="9:00A - 5:00P • 8H">9:00A - 5:00P • 8H <img style="margin-top:-2px" ng-show="event.tagId &amp;&amp; event.status !== 'planning'" src="/assets/svg/Icons/16/shift-repeat-white-8afc52.svg" class="ng-hide"> <img style="margin-top:-2px" ng-show="event.tagId &amp;&amp; event.status === 'planning'" src="/assets/svg/Icons/16/shift-repeat-gray-6d0e14.svg" class="ng-hide"></div><div class="ellipsis duration" ng-show="event.position">Design <span class="show-on-collapsed">• Carl Fairclough</span></div><div class="ellipsis duration ng-hide" ng-show="!event.position">Carl Fairclough</div><span class="shift-details-status ng-hide" ng-show="event.showOfferedShiftIcon"><img src="/assets/svg/Icons/24/shift-offer-white-cce33c.svg"> </span><span class="shift-details-status ng-hide" ng-show="event.showAvailableShiftIcon"><img src="/assets/svg/Icons/24/shift-available-white-c55aba.svg"> </span><span class="shift-details-status ng-hide" ng-show="event.showTimeoffIcon"><img src="/assets/svg/Icons/24/shift-timeoff-white-0cab28.svg"></span></div></div><!----></div> 

<div data-shift-id="134514" data-is-exchange="false" ng-repeat="event in ::(_events = (user.events[day] | filter:ctrl.filterOutMultiday | orderBy:['sort', 'dtstart'])) track by event.key" lvl-draggable="true" augment-draggable="" class="shift s12B835 published can-be-selected" ng-class="::{ 
       leave: event.type === 'leave', 
       staging: event.status === 'planning', 
       cancelled: event.cancelled, 
       openend: event.isOpenEnded, 
       published: event.status === 'published', 
       unpublished: event.status !== 'published', 
       unavailability: event.type === 'availability', 
       'can-be-selected': event.canBeSelected 
      }" draggable="true" id="c9d08710-daef-cdf7-9d7b-c4ceb13541a6"><!----><div class="shift-selection" ng-click="ctrl.stopEventPropagation($event)" ng-if="::event.canBeSelected"><div class="checkmark-wrapper"><label class="checkmark"><input type="checkbox" ng-model="ctrl.selectedEvents[event.id]" ng-change="ctrl.selectionChanged()" class="ng-pristine ng-untouched ng-valid ng-empty"> <span></span></label></div></div><!----><div class="shift-details" ng-click="ctrl.openShift(event, group.isExchange, $event)" ng-class="{'right-icon': event.showOfferedShiftIcon || event.showAvailableShiftIcon || event.showTimeoffIcon}"><div class="ellipsis" title="9:00A - 5:00P • 8H">9:00A - 5:00P • 8H <img style="margin-top:-2px" ng-show="event.tagId &amp;&amp; event.status !== 'planning'" src="/assets/svg/Icons/16/shift-repeat-white-8afc52.svg" class="ng-hide"> <img style="margin-top:-2px" ng-show="event.tagId &amp;&amp; event.status === 'planning'" src="/assets/svg/Icons/16/shift-repeat-gray-6d0e14.svg" class="ng-hide"></div><div class="ellipsis duration" ng-show="event.position">Design <span class="show-on-collapsed">• Carl Fairclough</span></div><div class="ellipsis duration ng-hide" ng-show="!event.position">Carl Fairclough</div><span class="shift-details-status ng-hide" ng-show="event.showOfferedShiftIcon"><img src="/assets/svg/Icons/24/shift-offer-white-cce33c.svg"> </span><span class="shift-details-status ng-hide" ng-show="event.showAvailableShiftIcon"><img src="/assets/svg/Icons/24/shift-available-white-c55aba.svg"> </span><span class="shift-details-status ng-hide" ng-show="event.showTimeoffIcon"><img src="/assets/svg/Icons/24/shift-timeoff-white-0cab28.svg"></span></div></div> 

das einzige, was für mich, dieses Element zu holen ist zu verwenden:

> data-shift-id="134514" 

ich habe versucht, verschiedene Arten wwith id und XPath aber gleiche re sult am Ende: "Dieses Element kann nicht gefunden werden"

Haben Sie Ideen?

+0

Sie Klasse verwenden können. SHare your Website –

+0

Ich glaube nicht, dass es mit Klasse arbeiten kann und tut mir leid, ich kann die Website nicht teilen, erfordert Anmeldeinformationen. –

+0

Es gibt ng repeat tag. Verwenden Sie Wiederholung. –

Antwort

0

Sie können eine cssSelector bauen Attribut wie folgt aus:

driver.find_element_by_css_selector("Yourtag[attributeName='Your AttributeValue']"); 

Für Ihren speziellen Fall bei Temperaturen unter Code-Schnipsel:

driver.find_element_by_css_selector("div[data-shift-id='134514']"); 
+0

Danke für deine Hilfe, ich habe deine Idee ausprobiert, aber es ist immer noch nicht in der Lage dieses Element zu finden. –

+0

wirft es keine Ausnahme? Können Sie geprüften HTML-Code-Teil bereitstellen? –

+0

Die Ausnahme ist NoSuchElement, ich habe meinen Beitrag bearbeitet, um Ihnen mehr HTML zu bieten –

Verwandte Themen